0

为我的服务应用程序安装 Wix 我遇到了这样的麻烦 - 当我选择“修复”选项时,安装后我被提示重新启动我的电脑。实际上我的测试安装只包含两个文件。虽然有一些属性使安装程序停止服务(实际上由于日志而停止并卸载服务),但文件仍然忙于服务的进程。我究竟做错了什么?有什么解决方法吗?在这种情况下,我怎样才能摆脱重启提示?这是安装程序的代码:

<Fragment>
        <ComponentGroup Id="ProductComponents" Directory="AGENTFOLD">
            <Component Id="WindowsAgent" Guid="*">
        <File Id="WinAgent" KeyPath="yes" Source="WindowsAgent.exe"/>
        <ServiceInstall Id='WindowsAgentInst' Name='WindowsAgent' DisplayName='WindowsAgent' Type='ownProcess' Account='LocalSystem' Start='auto' ErrorControl='normal'/>
        <ServiceControl Id="WindowsAgentControl" Name="WindowsAgent" Stop="both" Start="install" Remove="uninstall" Wait="yes" />
      </Component>
      <Component Id="cmp2" Guid="GUIDHERE">
        <File Id="fil2" KeyPath="yes" Source="mydll.dll" />
      </Component>
        </ComponentGroup>
    </Fragment>

这是日志所说的:

信息 1603。文件 C:\Program Files(x86)\WindowsAgent\mydll.dll 正在使用中。关闭该应用程序并重试。

MSI (s) (88:78) [17:01:50:993]:产品:Setuptest。以下进程正在使用文件 C:\Program Files (x86)\WindowsAgent\mydll.dll:名称:WindowsAgent,ID 3384。

信息 1603。文件 C:\Program Files (x86)\WindowsAgent\WindowsAgent.exe 正在使用中。关闭该应用程序并重试。

MSI (s) (88:78) [17:01:51:182]:产品:Setuptest。以下进程正在使用文件 C:\Program Files(x86)\WindowsAgent\WindowsAgent.exe:名称:WindowsAgent,ID 3384。

请注意,如果我在维修前手动停止服务,一切正常。

4

1 回答 1

1

造成这种情况的一些常见原因是:

  1. 在服务协议已经完成并且进程不再作为服务运行,但进程仍在运行且尚未终止的意义上,服务可能被“停止”。服务停止!=进程终止。所以这是时间问题,如果有很多事情发生,可能需要一段时间才能结束并释放 Dll。当您手动关闭服务时不会发生这种情况,因为没有人关心该过程是否需要一段时间才能关闭。安装/卸载是进程关闭和 Windows 想要摆脱正在使用的 Dll 之间的竞赛。该服务可能在某些方面行为不端,不能排除这种可能性。

  2. 某些东西具有对服务或进程开放的句柄。在您的情况下这似乎不太可能,但如果系统上或安装中有应用程序(如自定义操作)已打开服务句柄或进程句柄,则它们无法完全终止。

于 2015-03-27T18:01:13.660 回答