Wix服务安装DLL

时间:2011-08-03 15:09:11

标签: dll wix serviceinstall

我在Wix中有自定义操作来为我的应用程序安装其中一项服务。

<Custom Action='ManagedInstall' After="InstallFinalize"/>

    <CustomAction Id="ManagedInstall"
                  Directory='INSTALLDIR'
                  ExeCommand='"[WindowsFolder]\Microsoft.NET\Framework\v2.0.50727\installUtil.exe" /LogToConsole=false ControlService.dll'
                  Impersonate='yes'
                  Return='check'>
    </CustomAction>

  

这在使用XP和7的Windows下运行正常(UAC升级)   除了我们的一些笔记本电脑之外的任何台式机,虚拟机或笔记本电脑   加密。

假设这是因为加密中断了installUtil.exe控制台执行(由于某种原因,这是系统之间发现的唯一区别),正在尝试解决此替换上述自定义操作代码的解决方案。

        <Component Id='ControlServiceDLL' Guid='27C58A4E-E1A9-4b85-B048-F8BBB1BF3C76'>
          <File Id='ControlService.dll'
              Name='ControlService.dll'
              DiskId='1'
              Source='Data\ControlService.dll'
              Vital='yes'
              KeyPath='yes'/>

          <ServiceInstall
              Id="ControlServiceInstall"
              Type="shareProcess"
              Vital='yes'
              Name='ControlService'
              DisplayName='Control Service'
              Description='Control Service Description'
              Start="demand"
              ErrorControl='ignore'
              Interactive="no">
          </ServiceInstall>

          <ServiceControl Id="StartService" Remove="uninstall" Name="Control Service" Wait="yes" />
        </Component>

它最初无法启动所以我不得不删除Service Control启动/停止命令以查看它是否已安装。是的它安装得很好但是无法手动启动服务。

通过观察发现以下内容可能有助于某人试图帮助我。

使用我在下面找到的两种不同方法比较服务属性 希望它可以帮助那些能够回答我问题的人。

使用自定义操作:Service Properties Executable Path显示, C:\ windows \ SysWOW64 \ dllhost.exe / Processid:{926E3CF4-B966-4E61-A46B-C3C49F579F7C}

通过使用Service Install显示, “C:\ Program Files(x86)\ My Test Company \ Services \ ControlService.dll”

2 个答案:

答案 0 :(得分:1)

您遇到的问题/面临的问题是您尝试将dll作为服务托管。 Windows服务是可执行文件(exe)。

如果您使用的是wix 3.0或更高版本,请使用非自定义操作方法,如此处所述,包括我遇到的关键路径陷阱: http://blog.tentaclesoftware.com/archive/2009/01/01/21.aspx

答案 1 :(得分:-2)

您可以包含具有管理权限的应用程序清单,因此将在管理员帐户下创建/调用所有事件。

如果您有msi,那么您可以使用dotnetinstaller工具,它将msi转换为exe并将UAC连接到安装程序。因此,如果用户没有管理员权限,安装程序将提示它。