无法在Wix设置中启动.exe

时间:2016-09-13 08:50:37

标签: c# wix

我有一个带有wix设置的C​​#应用​​程序。我已经使用2个复选框(this)定制了ExitDialog,用于运行我的应用程序,另一个用于运行可选安装(用于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用户界面(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>

有我的设置:

Setup tree

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 {{1 } = 1721   信息1721.此Windows Installer程序包存在问题。无法运行此安装所需的程序。请联系您的支持人员或包装供应商。操作:SetExecUEye,位置:C:\ uEye64_47100_WHQL.exe,命令:

我不明白这个错误,我也不知道该文件在C:\中的原因(我使用Error找到它)

EDIT2:

创建的组件:

SourceDir

目录:

  <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>

如何定义仅在我的发布文件夹中复制uEye64_47100_WHQLexe? <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> 设置为C:\

1 个答案:

答案 0 :(得分:1)

如果要复制它并在安装时运行,则必须为主.exe创建另一个uEye64_47100_WHQL.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进行自定义操作。但我建议为两个文件定义自定义操作,如

<CustomAction Id="RunuEye64_47100_WHQLexe" FileKey="uEye64_47100_WHQLexe" ExeCommand="" Return="ignore" Impersonate="yes" />

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

发布部分UI不是

Event="DoAction" 
Value="RunuEye64_47100_WHQLexe">