我有一个带有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>
有我的设置:
MyApplication.exe的检查功能很好,另一个没有。该代并没有在本地目录中复制uEye64_47100_WHQL.exe
,当我检查该选项时,没有任何附加内容。
我从WiX开始,我错过了什么?
编辑:
现在我有一个.exe
的组件。该文件已被复制,但我无法运行它。在msiexec的日志中我有:
MSI(c)(C4:B8)[12:45:35:109]:注意:1:2228 2:3:错误4:SELECT
Message
FROMError
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:\
答案 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">