Com 如何自动注册ATL服务?

Com 如何自动注册ATL服务?,com,windows-services,wix,windows-installer,atl,Com,Windows Services,Wix,Windows Installer,Atl,我有一个包含ATL服务的项目。目前,我们的安装程序使用自定义操作注册服务,这些自定义操作使用以下命令运行已安装的服务可执行文件: MyService.exe /server 并使用命令将其注销 MyService.exe /unregservice 在某些情况下,如果命令失败,安装陷入无法完成或完全回滚的状态,导致应用程序无法使用,这会造成麻烦 我们希望通过使用ServiceInstall标记在MSI文件中完全注册来替换这些自定义操作,但我们无法使其工作。我们的初始代码如下所示: <C

我有一个包含ATL服务的项目。目前,我们的安装程序使用自定义操作注册服务,这些自定义操作使用以下命令运行已安装的服务可执行文件:

MyService.exe /server
并使用命令将其注销

MyService.exe /unregservice
在某些情况下,如果命令失败,安装陷入无法完成或完全回滚的状态,导致应用程序无法使用,这会造成麻烦

我们希望通过使用ServiceInstall标记在MSI文件中完全注册来替换这些自定义操作,但我们无法使其工作。我们的初始代码如下所示:

<Component Id="c.MyService.exe" Guid="{PUT-GUID-HERE}">
    <File Id="f.MyService.exe" Name="MyService.exe" KeyPath="yes"
          DiskId="1" Source="$(var.MyService.TargetPath)" Vital="yes" />

    <ServiceInstall Id="svci.MyService" Name="MyService" Type="ownProcess"
                    Start="demand" ErrorControl="normal" DisplayName="MyService"
                    Description="My Service" Account="LocalSystem" Interactive="no"
                    Vital="yes">
      <ServiceDependency Id="RPCSS"/>
    </ServiceInstall> 
    <ServiceControl Id="svcc.MyService" Stop="both" Remove="uninstall" 
                                     Name="MyService" Wait="yes" />

</Component>
通过谷歌发现的一个建议是在组件标签中添加AppId标签,如下所示:

<Component ... />
...
<AppId Id="$(var.MyServiceGUID)" LocalService="MyService" Description="MyService" /> 
...
</Component>

...


非常感谢

WiX有一个名为Heat的程序,可用于获取ATL服务器的COM元数据。运行此程序以生成wxs框架,将COM元素迁移到wxs框架,然后在干净的快照VM上重建和测试。如果需要,冲洗并重复,因为COM/ATL有时有点棘手


可能的重复不仅仅是由特定注册表项支持的COM对象注册<代码>/service
CreateService
API对话,您仍然需要以某种方式进行补偿。
<Component ... />
...
<AppId Id="$(var.MyServiceGUID)" LocalService="MyService" Description="MyService" /> 
...
</Component>