【问题标题】:WiX Installer Service File Locked PromptWiX 安装程序服务文件锁定提示
【发布时间】:2014-06-24 19:40:16
【问题描述】:

我有一个 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" />

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

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

【问题讨论】:

    标签: wix installation windows-installer


    【解决方案1】:

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

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

    【讨论】:

    • 我认为可能是这样的。我来看看服务本身是如何处理数据库访问的。
    猜你喜欢
    • 2011-03-15
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多