如何在WIX

时间:2018-03-07 18:19:15

标签: wix windows-installer wix3.11

我想在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 &amp; 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自定义操作。

有没有办法克服我的问题?

1 个答案:

答案 0 :(得分:2)

您无法通过即时自定义操作执行此操作,因为即时CA未升级。您的自定义操作需要延迟并且不要模拟,以便它在InstallFinalize之前运行提升。

根据我的经验,许多客户不希望进行这种调整,那么为什么不以通常的方式启动服务呢?或者,如果他们选择不启动它并且有一个与该服务相关联的应用程序,那么可能在那里有一些UI来启动或停止服务(这又需要提升)。

服务是否配置为在重启后启动?我认为是,否则用户将始终需要启动它。