【问题标题】:Unable to launch .exe in Wix setup无法在 Wix 设置中启动 .exe
【发布时间】:2016-09-13 19:51:27
【问题描述】:

我有一个带有 wix 设置的 C# 应用程序。我已经定制了ExitDialog,带有2个复选框(在this之后),用于运行我的应用程序,另一个用于运行可选安装(用于uEye相机)。

第一个复选框是:

<!-- Set checkbox for launch my application -->
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch $(var.product)"/>    
<CustomAction Id="SetExecVR3" Property="WixShellExecTarget" Value="[#MyApplication.exe]"/>
<CustomAction Id="DoExec" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" Return ="ignore"/>    

第二个:

<!-- Set checkbox for launch install uEye -->
<Property Id="WIXUI_EXITDIALOGUEYECHECKBOXTEXT" Value="Launch install uEye"/>    
<CustomAction Id="SetExecUEye" Property="WixShellExecTarget" Value="./Resources/uEye64_47100_WHQL.exe"/>

还有我的 Wix UI(this 帮助了我):

<UI>
  <UIRef Id="WixUI_Custom"/>
  <Publish Dialog="MyExitDialog"
           Control="Finish" 
           Event="DoAction" 
           Value="SetExecVR3">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
  <Publish Dialog="MyExitDialog"
           Control="Finish" 
           Event="DoAction" 
           Value="DoExec">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>

  <Publish Dialog="MyExitDialog"
           Control="Finish" 
           Event="DoAction" 
           Value="SetExecUEye">WIXUI_EXITDIALOGUEYECHECKBOX = 1 and NOT Installed</Publish>
  <Publish Dialog="MyExitDialog"
           Control="Finish" 
           Event="DoAction" 
           Value="DoExec">WIXUI_EXITDIALOGUEYECHECKBOX = 1 and NOT Installed</Publish>
</UI>

这是我的设置:

MyApplication.exe 的复选框运行良好,而另一个则没有。一代没有在本地目录中复制uEye64_47100_WHQL.exe,当我检查选项时没有附加任何内容。

我从 WiX 开始,我错过了什么?

编辑:

现在我有一个带有.exe 的组件。该文件已复制,但我无法运行它。使用 msiexec 登录我有:

MSI (c) (C4:B8) [12:45:35:109]: 注意: 1: 2228 2: 3: 错误 4: SELECT Message FROM Error WHERE Error = 1721 信息 1721。此 Windows 安装程序包有问题。无法运行完成此安装所需的程序。请联系您的支持人员或软件包供应商。动作:SetExecUEye,位置:C:\uEye64_47100_WHQL.exe,命令:

不明白这个错误,也不知道为什么文件在C:\(我用SourceDir定位)

编辑2:

创建的组件:

  <Component Id="uEye64_47100_WHQLexe" Directory="TARGETDIR" Guid="{1BD47632-42D5-4C56-B207-1E6B1005488C}">
    <File Id="uEye64_47100_WHQLexe" Source="./Resources/uEye64_47100_WHQL.exe" KeyPath="yes" Checksum="yes" Compressed="no" Vital="no"/>
  </Component>

还有目录:

<Fragment>
  <Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="ProgramMenuFolder">
      <Directory Id="ApplicationProgramsFolder" Name="$(var.compagny)"/>
    </Directory>
    <Directory Id="DesktopFolder" SourceName="Desktop"/>
    <Directory Id="ProgramFilesFolder">
      <Directory Id="PRODUCTFOLDER" Name="$(var.compagny)">
        <Directory Id="INSTALLFOLDER" Name="$(var.product)">            
          <Directory Id="fr" Name="fr"/>   
        </Directory>
      </Directory>
    </Directory>
  </Directory>
</Fragment>

如何定义 uEye64_47100_WHQLexe 仅在我的发布文件夹中复制? TARGETDIR 设置为 C:\

【问题讨论】:

    标签: c# wix


    【解决方案1】:

    如果您想复制它并在安装时运行,您必须为您的uEye64_47100_WHQL.exe 创建另一个组件,就像您的主 .exe 一样。如果它仅位于 Resource 文件夹中,则只能在编译时作为文件源引用,因为它不会添加到安装程序本身。所以创建像

    这样的组件
    <Component Id="uEye64_47100_WHQLexe" Directory="APPLICATIONFOLDER" Guid="*">
        <File Id="uEye64_47100_WHQLexe" Source="./Resources/uEye64_47100_WHQL.exe" KeyPath="yes" Checksum="yes" />
    </Component>
    

    然后您可以使用WixShellExec 在自定义操作中使用它,例如MyApplication.exe。但我建议为两个文件定义自定义操作,例如

    &lt;CustomAction Id="RunuEye64_47100_WHQLexe" FileKey="uEye64_47100_WHQLexe" ExeCommand="" Return="ignore" Impersonate="yes" /&gt;

    因为它可以直接使用而不会弄乱WixShellExecTarget属性;-)

    发布部分 UI 将比

    Event="DoAction" 
    Value="RunuEye64_47100_WHQLexe">
    

    【讨论】:

    • 我修改了两个CustomAction,现在我只有一个Publish by Action :-)。我还为 uEye.exe 添加了组件。现在该文件被复制到我的安装文件夹中。但是当我选中“启动安装 uEye”框时,光标会等待 1 秒钟,然后设置关闭,没有任何反应。 .exe文件需要管理员权限,有什么原因吗?
    • 所以现在它将文件复制到安装位置,但尝试从 C:\ 运行它?您能否像现在一样添加组件和 CustomAction 代码,理想情况下也可以使用 结构?顺便说一句 SourceDir 表示根目录,从中创建目录树,所以它是 C:\
    • 我编辑了帖子,经过研究发现错误 1721 可能是因为应用程序需要更多权限。该 exe 被复制到 C:\(而不是 [MyApplication]\bin\Release)中,但它是从那里正确调用的。
    • 您可以使用组件中的目录设置来编辑安装过程中的放置位置。 Directory="TARGETDIR" 表示 SourceDir,即 C: 。如果您使用Directory="INSTALLFOLDER" 文件应放置到C:\Program Files(x86)\Company\Product。如果您想在此结构中进一步嵌套,只需在&lt;Directory Id="INSTALLFOLDER"...&gt; 中定义另一个目录,例如&lt;Directory Id="BINFOLDER" Name="bin"&gt; 用于bin 文件夹,在其中另一个&lt;Directory Id="RELEASEFOLDER" Name="Release"&gt; 用于Release 文件夹。然后只需为您的组件设置Directory="RELEASEFOLDER"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 2018-03-30
    相关资源
    最近更新 更多