【问题标题】:Prompt user to close applications on uninstall - WIX提示用户在卸载时关闭应用程序 - WIX
【发布时间】:2015-12-14 22:21:00
【问题描述】:

我有一个自定义操作“xxxx”,它通过命令提示符执行 rmdir 来删除目录。 ExeCommand="[SystemFolder]cmd.exe /C rmdir /Q /S "[DIR]"" and Execute="deferred"

在InstallExecuteSequence中添加如下

Custom Action="xxxx" After="InstallInitialize"
  (NOT UPGRADINGPRODUCTCODE) AND REMOVE
Custom

如果目录被命令行等其他应用程序打开,则会抛出错误。

我阅读了许多类似的问题。但是想不通

1) 提示用户关闭应用程序 - 我读过添加

UI
  DialogRef Id="FilesInUse" 
  DialogRef Id="MsiRMFilesInUse" 
/UI

并使用自定义操作Before="InstallValidate" 显示关闭应用程序的提示。

2) 如何在服务停止后运行自定义操作并提示用户关闭应用程序? 它应该在延迟模式下运行。

3) 如果我想在Execute = deferred 中运行,那么我不能使用InstallValidate。因此我不能使用 FilesInUse。

4) 还有其他好的方法吗?我不想引用 dll,因为我希望安装程序在卸载时删除整个目录。

【问题讨论】:

    标签: c++ visual-studio-2012 wix windows-installer uninstallation


    【解决方案1】:

    最大的问题是为什么您需要删除该文件夹,因为通常您不需要。这意味着它必须被抛在后面,但这只是一个猜测,所以我会说这是要处理的问题 - 为什么它被抛在后面。您的问题是关于为什么您的解决方案不起作用。根本问题是,如果 Windows 决定它需要一个 FilesInUse 对话框,而 Windows 不需要一个,InstallValidate 将提示一个对话框——你这样做是因为你的自定义操作——这就是 FilesInUse UI 引用没有帮助的原因。

    如果你想删除文件或文件夹,WiX RemoveFile 元素是常用的方法,它发生在卸载中其他所有内容都已被删除的正确位置:

    Wix RemoveFile and RemoveFolder for removing leftovers

    如果您想告诉应用程序关闭,可以使用 WiX Util CloseApplication。

    如果你真的想用你的代码和 FilesInUse 提示来解决文件夹问题(而不是解决该文件夹的潜在问题),那么像这样的 C++ 自定义操作将在 InstallValidate 应该工作之前立即显示一个 FilesInUse 对话框,你'将需要一些包含的 msi.h、msiquery.h:

    UINT __stdcall ShowFilesInUse (MSIHANDLE hInstall) 
    {
    PMSIHANDLE hRec = MsiCreateRecord(4);
    MsiRecordSetString(hRec, 1, TEXT(" "));
    MsiRecordSetString(hRec, 2, TEXT("Please use Task Manager to Terminate these programs:"));
    MsiRecordSetString(hRec, 3, TEXT("something else"));
    UINT res = 0;
    do 
    {
    res = MsiProcessMessage(hInstall, INSTALLMESSAGE_FILESINUSE, hRec);
    }
    while (res == IDRETRY);
    if (IDOK==res) // 1 is the Continue button in VS
       return 0; 
    if (IDCANCEL ==res) // The Exit button in VS 
       return ERROR_INSTALL_USEREXIT;
    return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-17
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      相关资源
      最近更新 更多