为什么我的WIX CustomAction没有以正确的顺序运行?
我已经在与Peter Kottas WindowsServer nuget(https://github.com/PeterKottas/DotNetCore.WindowsService)一起安装的DotNet Core中构建了一个Windows服务。为了安装该服务,你必须发布的代码,将其部署在何地,运行CMD具有管理员权限的提示,将目录复制到部署的代码并执行以下行:“为MyService措施:安装”为什么我的WIX CustomAction没有以正确的顺序运行?
<CustomAction Id="CallCmd" Value="[SystemFolder]cmd.exe" Directory="MYSERVICE" />
<CustomAction Id="MoveDirectory" Directory="MYSERVICE" ExeCommand="cd C:\Program Files (x86)\MYCOMPANY\MYSERVICE"/>
<CustomAction Id="CA_InstallMyService" Directory="MYSERVICE" ExeCommand="MyService action:install" />
<InstallExecuteSequence>
<Custom Action="CallCmd" After="PublishProduct" />
<Custom Action="MoveDirectory" After="CallCmd" />
<Custom Action="CA_InstallMyService" After="MoveDirectory" />
</InstallExecuteSequence>
展望在Orca中它看起来是按照正确的顺序排列的,因为这些指令在创建之前无法浏览到该文件夹。
然而,在执行MSI,点击后“安装”,它得到一半,失败和倒退通过安装过程中运行。 (我试过看过“Program Files(x86)”目录,甚至没有看到我的Product.wxs中创建的目录文件夹结构。
在事件查看器中稍微挖掘一下会显示以下错误:
Error 1721. There is a problem with this Windows Installer package. A program required for this install to complete could not be run. Contact your support personnel or package vendor. Action: MoveDirectory, location: C:\WINDOWS\SysWOW64\cmd.exe\, command: cd C:\Program Files (x86)\MYCOMPANY\MYSERVICE
为Execute="Deferred"
的InstallExecuteSequence两个部分发生了,你必须标记你的CustomActions,第一个是规划阶段它算出它会做,第二部分是运行计划脚本,它只是在高架环境下制作。
如果您在InstallExecuteSequence中规划了一些自定义操作,但不会将它们标记为延迟,它们将在任何文件安装之前的执行顺序的规划部分期间运行,因为InstallFiles标准操作需要提升并发生这种情况在序列的第二部分中,当它运行计划脚本时。
通常,当您需要运行需要安装的属性值的提升自定义操作时,才使用此模式。您计划两个自定义操作,一个是延迟操作,另一个是非延迟操作,实际上它设置延迟操作执行时使用的某些特殊值。
我之前没有使用CustomActions的Directory属性,所以您可能需要重新编写一些这些操作才能让它们工作,我不确定。
如果您需要更改自定义操作的工作方式,此其他问题的答案应该有助于解释延迟自定义操作在运行时如何从安装程序的属性获取值。
WiX - commit more than one Property to deferred Custom Action
这不是一个很好的设计范例考虑到Windows安装程序(和维克斯)内置了支持安装服务,以及启动和停止,以便它们可以被替换或卸载。该nuget可能是一个有趣的服务模型,但启动,停止和部署不是使用Windows Installer安装服务的推荐方式。根本不需要运行代码。
请参阅WiX ServiceInstall和ServiceControl元素。
您可以删除CallCmd和MoveDirectory自定义操作,而是使用'cmd。exe/c“C:\ Program Files文件(x86)\ MYCOMPANY \ MYSERVICE”操作:安装' – philselmer
感谢菲尔这正是我所需要的,遵循一些cmd Google搜索并将其从安装程序的最终自定义操作运行 – Craig