Wix 修复:尽管服务已停止并删除,但文件仍由服务保留

Wix repair : files are still held by service although it was stopped and deleted

为我的服务应用程序安装 Wix 我 运行 遇到了这样的麻烦 - 当我选择 "repair" 选项时,安装后我 提示重新启动 我的个人电脑。 实际上我的测试安装只包含两个 files.Although 有一些属性使安装程序 停止服务 (并且它实际上停止并卸载服务由于日志),文件 仍在忙于服务的进程。 我究竟做错了什么?有什么解决方法吗?在这种情况下如何摆脱重启提示? 这是安装程序的代码:

<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>

日志是这样写的:

Info 1603. The file C:\Program Files(x86)\WindowsAgent\mydll.dll is being held in use. Close that application and retry.

MSI (s) (88:78) [17:01:50:993]: Product: Setuptest. The file C:\Program Files (x86)\WindowsAgent\mydll.dll is being used by the following process: Name: WindowsAgent , Id 3384.

Info 1603. The file C:\Program Files (x86)\WindowsAgent\WindowsAgent.exe is being held in use. Close that application and retry.

MSI (s) (88:78) [17:01:51:182]: Product: Setuptest. The file C:\Program Files(x86)\WindowsAgent\WindowsAgent.exe is being used by the following process: Name: WindowsAgent , Id 3384.

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

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

  1. 服务可能是"stopped",服务协议已经完成,进程不再运行作为服务,但进程仍然是运行 并没有终止。服务已停止!= 进程已终止。所以这是时间问题,如果有很多事情要做,那么这个过程可能需要一段时间才能结束并释放 Dll。当您手动关闭服务时不会发生这种情况,因为没有人关心进程是否需要一段时间才能关闭。 install/uninstall 是进程关闭和 Windows 想要摆脱正在使用的 Dll 之间的竞争。该服务可能在某种程度上行为不端,不能排除这种可能性。

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