【问题标题】:wix srvany.exe as a service not runningwix srvany.exe 作为服务未运行
【发布时间】:2016-08-29 15:17:23
【问题描述】:

我有一个想要作为服务运行的 Kofax 组件 exe。早期的 srvany.exe 用于手动将 exe 注册为服务。我正在创建一个 wix msi 安装程序,它将作为服务安装。安装后,当我以管理员身份手动运行 exe 时,它​​运行完美并进行了适当的更新,否则管理员不会给出一些 activex 错误。因此,我在 exe 属性中选中了“以管理员身份运行此程序”。我的问题是 msi 安装的服务没有自动执行 exe,也没有发生更新。但是,如果服务启动并运行,然后我将尝试手动运行 exe,那么它会给出“它已经在运行”的消息,这意味着服务正在运行 exe,但没有更新任何东西。我应该在下面的代码中进行什么更改,以便服务可以选择 exe 并运行。

<Component Id="comp_KofaxCaptureQCRoute_exe" Guid="F7C1EBE7-3D7B-4E6D-8098-81EDDFD156EF" Permanent="no" Transitive="no">
            <File Id="file_KofaxCaptureQCRoute_exe" DiskId="1" Hidden="no" ReadOnly="no" TrueType="no" System="no" Vital="yes" Name="KofaxCaptureQCRoute.exe" Source="..\QC Route\KofaxCaptureQCRoute\bin\debug\KofaxCaptureQCRoute.exe" KeyPath="yes" />
        </Component>
        <Component Id="comp_file_srvany" Guid="D9CA373B-66B9-4FC5-A88D-E97FDDBBD526">
          <File Id="file_srvany" Source="..\QC Route\srvany.exe" KeyPath="yes" />

        <ServiceInstall 
        Id="QCRouteService"
        Type="ownProcess"
        Name="QCRouteService"
        DisplayName="Kofax_QCRoute_Service"
        Start="auto"
        Account="[SERVICEACCOUNT]"
        Password="[SERVICEPASSWORD]"
        ErrorControl="normal"
        Vital="yes"
         />
        <ServiceControl Id="Kofax_QCRoute_Service" Stop="both" Remove="uninstall" Name="QCRouteService" Wait="yes" />
        <RegistryKey Root="HKLM"
                 Key="SYSTEM\CurrentControlSet\Services\QCRouteService\Parameters"
          Action="createAndRemoveOnUninstall">
              <RegistryValue Type="string" Name="Application" Value="&quot;[#file_KofaxCaptureQCRoute_exe]&quot;"  />                 
        </RegistryKey>
          <RegistryKey Root="HKLM"
                 Key="SYSTEM\CurrentControlSet\Services\QCRouteService\Enum"
          Action="createAndRemoveOnUninstall">
              <RegistryValue Type="string" Name="0" Value="Root\LEGACY_QCROUTESERVICE\0000"  />
              <RegistryValue Type="integer" Name="Count" Value="1" />
              <RegistryValue Type="integer" Name="NextInstance" Value="1" />
          </RegistryKey>
      </Component>

【问题讨论】:

    标签: vb.net wix kofax srvany


    【解决方案1】:

    我相信在您的服务安装中,您正试图在 SERVICEACCOUNT、SERVICEPASSWORD 属性指定的帐户下运行它,可能取自其他地方的示例。

    如果您没有设置这些属性,那么您应该使用接近此属性的 ServiceInstall

    <ServiceInstall 
        Id="QCRouteService"
        Type="ownProcess"
        Name="QCRouteService"
        DisplayName="Kofax_QCRoute_Service"
        Start="auto"
        Account="LocalSystem"
        ErrorControl="normal"
        Vital="yes"/>
    

    另请注意,您的 ServiceControl 省略了 Start 内部文本

    <ServiceControl Id="Kofax_QCRoute_Service" Start="install" Stop="both" Remove="uninstall" Name="QCRouteService" Wait="yes" />
    

    【讨论】:

    • 我试过了,但还是没有成功。我需要包含自定义操作标签吗?我不知道这一点。还有 Enum 注册表项的实际作用。我想我应该删除它。我还可以尝试哪些其他事情?请提出建议。
    • 我进一步分析发现一个 dll 没有被正确调用 DBLite.dll 并抛出以下错误从 IClassFactory 创建一个具有 CLSID {C49DF797-F12D-11D3-A41D-009027253C28} 的 COM 组件的实例由于以下错误而失败:80171500 HRESULT 异常:0x80171500。 2016 年 8 月 30 日 02:28:07:对象引用未设置为对象的实例。我需要通过 heat.exe 注册这个 dll 吗?我也有很多其他这样的dll。我该怎么办。
    • 如果您不经常更改接口(无论如何都不应该发生),那么是的,您可以使用热量来收集注册表信息。您可以做两件事,收获 every 构建,它会自动获得更改,或者只收获一次,并在初始工作后维护 wxs 组件,将 reg 内容放入其中。我对我的安装人员采取了第二种方法。
    • 第三个选项是在您的文件中指定 SelfRegCost="1" 以在安装期间对其调用 regsvr32 但 WiX 社区不太建议这样做,因为您无法控制 DllRegisterServer 中发生的事情和DllUnregisterServer.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    相关资源
    最近更新 更多