我有一个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" />
一切正常,并且正确卸载,但每次卸载时都会出现提示并不理想。我意识到我可能会有点挑剔,但我希望这样能正常工作。
我该怎么做才能避免此提示出现?
答案 0 :(得分:0)
假设服务进程具有对该mdf文件的独占访问权限并且这是一个时间问题,它可能是这样的:
服务流程不再是服务并不意味着包含流程已终止,只是它不再是服务。然后该过程必须关闭,如果关闭该mdf文件是“懒惰”,则在该过程处于终止的最后阶段之前,句柄将不会是空闲的,并且可能在一段时间之后。如果代码明确关闭了mdf文件,那么代码是在服务完成之前还是之后完成的?我可以想象,该服务可能会非常仓促地告诉Windows它已关闭(因为如果不是这样你就会遇到其他问题),但其余的管理工作稍晚,而卸载的其余部分仍在运行。