Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WiX安装程序服务文件锁定提示_Wix_Installation_Windows Installer - Fatal编程技术网

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

WiX安装程序服务文件锁定提示,wix,installation,windows-installer,Wix,Installation,Windows Installer,我有一个WiX安装程序,它在依赖数据库文件的系统上安装Windows服务。卸载过程中,总会出现提示,提示: 另一个应用程序以独占方式访问文件“…\db.mdf”。请关闭所有其他应用程序,然后单击“重试”。 用户需要点击“重试”,然后卸载工作正常。但是,每次卸载时都会出现此提示。我推测原因是,一旦卸载程序尝试卸载服务,ServiceControl尚未完全终止,并且尚未释放其资源(.mdf文件)。我认为“等待”属性应该处理这个问题 <ServiceControl Id="ServiceCont

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

另一个应用程序以独占方式访问文件“…\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" />

一切正常,卸载也正常,但每次卸载时都会出现提示并不理想。我意识到我可能有点吹毛求疵,但我希望它能正常工作


如何避免出现此提示?

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


服务进程不再是服务并不意味着包含进程的进程已经终止,只意味着它不再是服务。然后进程必须关闭,如果关闭mdf文件是“惰性”的,那么句柄在进程处于终止的最后阶段之前是不可用的,这可能需要一段时间。如果代码确实显式地关闭mdf文件,那么代码是在服务声明完成之前还是之后关闭mdf文件?我可以想象,该服务可能会很匆忙地告诉windows它已关闭(如果没有关闭,则会出现其他问题),但其余的内部管理工作将在稍后进行,而其余的卸载工作仍在运行

我想可能是这样的。我来看看服务本身是如何处理db访问的。