我想在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 denied
这可能是因为操作是immediate
而不是deffered
,但我可以&在这种情况下,运行deffered
自定义操作。
有没有办法克服我的问题?
答案 0 :(得分:2)
您无法通过即时自定义操作执行此操作,因为即时CA未升级。您的自定义操作需要延迟并且不要模拟,以便它在InstallFinalize之前运行提升。
根据我的经验,许多客户不希望进行这种调整,那么为什么不以通常的方式启动服务呢?或者,如果他们选择不启动它并且有一个与该服务相关联的应用程序,那么可能在那里有一些UI来启动或停止服务(这又需要提升)。
服务是否配置为在重启后启动?我认为是,否则用户将始终需要启动它。