【问题标题】:Custom action causes msi to fail when user has deleted files当用户删除文件时,自定义操作会导致 msi 失败
【发布时间】:2020-11-22 03:19:55
【问题描述】:

我为我的应用程序编写了一个 wix 脚本,它有 2 个与之关联的延迟自定义操作。

其中一个自定义操作在安装期间运行,另一个在卸载期间运行。

如果在用户手动删除文件后运行卸载程序,则会在卸载期间发生错误。这会导致 msi 查找要作为自定义操作运行的 .exe,但由于文件不存在而失败并导致卸载中止。

如果文件不存在,如何不运行自定义操作?

我没有找到任何类似的查询,所以我在这里发布。如果可以的话请帮帮我

【问题讨论】:

  • 请分享错误输出
  • 这个可执行文件在卸载时实际上做了什么?真正的解决方案通常是:1) 使用嵌入在设置中的 dll 自定义操作,2) 完全不需要自定义操作。请记住,卸载时完成的一些清理可以替换为向用户提供清理的说明(如果他们愿意)。通常,您在卸载时留下的是用户数据文件或设置文件,用户可能希望保留这些文件(例如,如果他们重新安装)。您通常不应删除任何用户数据。这样做通常会导致比保留数据更多的问题。

标签: windows-installer


【解决方案1】:

查看此链接:https://docs.microsoft.com/en-us/windows/win32/msi/searching-for-existing-applications-files-registry-entries-or--ini-file-entries

您需要搜索该文件,并且(如果找到)将文件的路径存储在一个属性中(如果没有找到,该属性的值将是一个空字符串)。然后将该属性用作您在 InstallExecuteSequence 表中的自定义操作的条件。

例如(如果文件存在于您的安装程序中,此示例会稍有变化,因为它将使用 CompLocator 表而不是 DrLocator 表):

在 AppSearch 表中添加一个条目,例如:

Property........Signature_
MYFILEEXISTS....AppSearchSignature

在 DrLocator 表中添加一个条目,例如:

Signature_.............Path
AppSearchSignature.....C:\PathToYourFile    

在签名表中添加一个条目,例如:

Signature.............Filename
AppSearchSignature....FileToSearchFor.exe   

最后在 InstallExecuteSequence 表中,找到您的自定义操作并给它一个条件:

MYFILEEXISTS<>""

换言之,仅当文件路径存在时才运行自定义操作。

应该这样做......

【讨论】:

    猜你喜欢
    • 2012-02-07
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多