【问题标题】:How to start a windows service after ExitDialog in WIX如何在 WIX 中的 ExitDialog 之后启动 Windows 服务
【发布时间】: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 &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 这可能是因为操作是 immediate 而不是 deffered,但我无法运行 deffered在这种情况下自定义操作。

有什么办法可以解决我的问题吗?

【问题讨论】:

  • 您是否尝试从services.msc 手动启动服务?那行得通吗?该服务是以LocalSystem 运行还是使用其他一些凭据?如果服务启动失败,可能会尝试重新启动并查看服务是否启动(自动或手动,具体取决于您的安装方式)。
  • 您可能希望设置 Impersonate='no' 以便自定义操作在 SYSTEM 用户下执行。

标签: wix windows-installer wix3.11


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    相关资源
    最近更新 更多