【发布时间】:2018-03-07 18:19:14
【问题描述】:
我想在 ExitDialog 中有一个复选框,并基于它启动或不启动我安装的 Windows 服务。我尝试使用执行命令行的自定义操作来启动 Windows 服务,这是我的 WIX 代码:
<Fragment>
<!--This is the custom action to start my windows service, note there is pause in ExecuteCommand to see the output of command line -->
<CustomAction Id='LaunchApp' Directory='INSTALLFOLDER' Execute='immediate'
ExeCommand='[SystemFolder]cmd.exe /C net start MyService & pause' Return='ignore'/>
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch My Windows Service" />
<UI Id="Custom_InstallDir">
<!--Here I start windows service if the checkbox is checked-->
<Publish Dialog="ExitDialog" Control="Finish" Event="DoAction" Value="LaunchApp" Order="998">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
<Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish>
<!--Some other code-->
</UI>
</Fragment>
当我安装我的应用程序并标记复选框以运行 Windows 服务时,我收到此错误:Access is deniedm 这可能是因为操作是 immediate 而不是 deffered,但我无法运行 deffered在这种情况下自定义操作。
有什么办法可以解决我的问题吗?
【问题讨论】:
-
您是否尝试从
services.msc手动启动服务?那行得通吗?该服务是以LocalSystem运行还是使用其他一些凭据?如果服务启动失败,可能会尝试重新启动并查看服务是否启动(自动或手动,具体取决于您的安装方式)。 -
您可能希望设置 Impersonate='no' 以便自定义操作在 SYSTEM 用户下执行。
标签: wix windows-installer wix3.11