WiX安装程序服务文件锁定提示

时间:2014-06-24 19:40:17

标签: wix installer windows-installer

我有一个WiX安装程序,它将Windows服务安装到依赖于数据库文件的系统上。在卸载过程中,总会出现一个提示:

" Anothing应用程序可以独占访问文件' ... \ db.mdf'。请关闭所有其他应用程序,然后单击“重试”。"

用户需要重试,然后卸载才能完美运行。但是,每次卸载时都会出现此提示。我认为原因是,一旦卸载程序尝试卸载服务,ServiceControl尚未完全终止并且尚未释放其资源(.mdf文件)。我想"等等"财产应该处理这个。

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

<!-- INSTALL AS SERVICE -->
<ServiceInstall Id="ServiceInstaller"
                                Type="ownProcess"
                                Vital="yes"
                                Name="xxmyservicexx"
                                DisplayName="xx my service xx"
                                Description="xxxxxxxx"
                                Start="auto"
                                ErrorControl="ignore"
                                Interactive="no" />

一切正常,并且正确卸载,但每次卸载时都会出现提示并不理想。我意识到我可能会有点挑剔,但我希望这样能正常工作。

我该怎么做才能避免此提示出现?

1 个答案:

答案 0 :(得分:0)

假设服务进程具有对该mdf文件的独占访问权限并且这是一个时间问题,它可能是这样的:

服务流程不再是服务并不意味着包含流程已终止,只是它不再是服务。然后该过程必须关闭,如果关闭该mdf文件是“懒惰”,则在该过程处于终止的最后阶段之前,句柄将不会是空闲的,并且可能在一段时间之后。如果代码明确关闭了mdf文件,那么代码是在服务完成之前还是之后完成的?我可以想象,该服务可能会非常仓促地告诉Windows它已关闭(因为如果不是这样你就会遇到其他问题),但其余的管理工作稍晚,而卸载的其余部分仍在运行。