1

我想在 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 deniedm 这可能是因为操作 isimmediate而不是,但在这种情况下deffered我无法运行自定义操作。deffered

有什么办法可以克服我的问题吗?

4

1 回答 1

3

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

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

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

于 2018-03-08T19:31:01.643 回答