WIX 工具集 CustomAction 以启动 Windows 服务
WIX Toolset CustomAction to start Windows Service
是否可以使用 CustomAction 启动我安装的 Windows 服务?
是否可以使用 CustomAction 来更改先前安装的 Windows 服务的启动类型?
如果有人能指导我正确的方向,我将不胜感激!
指导您正确的方向就是告诉您自定义操作不适合此操作。您可以使用注册表 element/table 更改现有服务的启动类型,您可以使用 ServiceControl element/table 启动您未安装的服务。
您可以编写自定义操作代码来启动服务,是的,作为一个 C++ 人,我会使用 Win32 StartService API。但是为什么要这样做呢? Windows 安装程序将使用 WiX ServiceControl 元素使用 StartServices 操作执行此操作。我知道在(比如)InstallFinalize 之后使用 CA 启动服务的唯一原因是因为它具有依赖项(GAC 或 Win32 SxS 中的程序集)直到 StartServices 操作之后才提交。
更改启动类型的推荐方法是使用 WiX ServiceConfig 元素。
这里是我用来直接从 WIX 自定义操作启动服务的示例代码
<CustomAction Id="StartWinService" Directory="INSTALLLOCATION" ExeCommand='NET START "[SERVICENAME]"' Execute="immediate" Return="ignore" />
我最终在 InstallDirDlg 中放置了一个复选框,并根据它的值决定是使用带有 ServiceInstall 元素的组件和 Start='auto' 还是使用带有 ServiceInstall 元素的组件和 Start='demand'。这解决了我的第一个问题。但是我不能使用 ServiceControl 元素来启动服务,因为这会在安装后直接启动服务,并且我的服务需要配置才能正常工作。所以我最终从我的源代码开始了我的服务。这样我就可以使用在 ExitDialog 'Finish'-Control.
上触发的 CustomAction
是否可以使用 CustomAction 启动我安装的 Windows 服务? 是否可以使用 CustomAction 来更改先前安装的 Windows 服务的启动类型?
如果有人能指导我正确的方向,我将不胜感激!
指导您正确的方向就是告诉您自定义操作不适合此操作。您可以使用注册表 element/table 更改现有服务的启动类型,您可以使用 ServiceControl element/table 启动您未安装的服务。
您可以编写自定义操作代码来启动服务,是的,作为一个 C++ 人,我会使用 Win32 StartService API。但是为什么要这样做呢? Windows 安装程序将使用 WiX ServiceControl 元素使用 StartServices 操作执行此操作。我知道在(比如)InstallFinalize 之后使用 CA 启动服务的唯一原因是因为它具有依赖项(GAC 或 Win32 SxS 中的程序集)直到 StartServices 操作之后才提交。
更改启动类型的推荐方法是使用 WiX ServiceConfig 元素。
这里是我用来直接从 WIX 自定义操作启动服务的示例代码
<CustomAction Id="StartWinService" Directory="INSTALLLOCATION" ExeCommand='NET START "[SERVICENAME]"' Execute="immediate" Return="ignore" />
我最终在 InstallDirDlg 中放置了一个复选框,并根据它的值决定是使用带有 ServiceInstall 元素的组件和 Start='auto' 还是使用带有 ServiceInstall 元素的组件和 Start='demand'。这解决了我的第一个问题。但是我不能使用 ServiceControl 元素来启动服务,因为这会在安装后直接启动服务,并且我的服务需要配置才能正常工作。所以我最终从我的源代码开始了我的服务。这样我就可以使用在 ExitDialog 'Finish'-Control.
上触发的 CustomAction