Wix修复:文件仍然由服务保留,尽管它已被停止和删除

时间:2015-03-27 14:38:16

标签: wix repair

为我的服务应用程序安装Wix我遇到了这样的麻烦 - 当我选择"修复"选项,安装后我提示重启我的电脑。   实际上我的测试安装只包含两个文件。虽然有一些属性使得安装程序停止服务(实际上由于日志而停止和卸载服务),文件仍然忙于服务&# 39;过程。  我究竟做错了什么?有没有解决方法?在这种情况下,如何摆脱重启提示? 这是安装程序的代码:

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

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

1 个答案:

答案 0 :(得分:1)

其中一些常见原因是:

  1. 服务可能会停止&#34;在某种意义上,服务协议已经完成并且该过程不再作为服务运行,但该过程仍在运行且尚未终止。服务停止!=流程终止。所以这是时间的事情,如果有很多事情发生,那么这个过程可能需要一段时间才能消失并释放Dlls。当您手动关闭服务时,这不会发生,因为没有人关心该过程是否需要一段时间才能关闭。安装/卸载是关闭进程和Windows想要摆脱使用中的Dll之间的竞争。该服务可能在某种程度上行为不端,无法排除这种情况。

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