【问题标题】:How can I find the previous install location of an application in InstallScript during a major upgrade?在重大升级期间,如何在 InstallScript 中找到应用程序的先前安装位置?
【发布时间】:2021-06-04 08:32:59
【问题描述】:

我正在更新使用 InstallShield 编写的安装程序,以执行应用程序的重大升级,并通过自定义操作调用 InstallScript 函数来备份和恢复应用程序目录中的一些文件。我有使用硬编码的先前安装目录的脚本,但需要找到安装应用程序的实际位置。

我可以使用以下方法获取当前安装的位置:

MsiGetProductInfo(PRODUCT_GUID, INSTALLPROPERTY_INSTALLLOCATION, savedInstallDir, bufferSize);

但如果我将 PRODUCT_GUID 更改为之前安装的产品代码的硬编码值,那么我会在 savedInstallDir 中得到一个空字符串:

MsiGetProductInfo("{my-previous-product-code}", INSTALLPROPERTY_INSTALLLOCATION, savedInstallDir, bufferSize);

【问题讨论】:

    标签: windows-installer installshield installscript


    【解决方案1】:

    您确定已为已安装的旧版本保留安装位置吗?当您尝试使用 VBScript 时,您会得到什么吗(当然是使用您自己的产品 G​​UID 进行更新):

    Dim installer : Set installer = CreateObject("WindowsInstaller.Installer")
    MsgBox installer.ProductInfo("{9B061D60-4E2C-4987-BFFD-423E3D477660}","InstallLocation")
    

    我检查了所有已安装的软件包,只有大约十几个(在几百个软件包中)保留了这条路径。 Script to check all installed packages.


    在注册表中:在 location:

    下查找值 "InstallLocation"
    • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\PACKEDGUIDHERE\InstallProperties

    • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{REGULARGUIDHERE}

    GUIDS:

    【讨论】:

    • 成功了——谢谢!我在 InstallScript 中按如下方式进行:set installer = CreateObject("WindowsInstaller.Installer"); SprintfMsiLog("BackupUserData: previous install dir %s", installer.ProductInfo("{my-previous-product-code}","InstallLocation")); 如果未安装产品,则会引发异常,但这应该很容易解决。感谢您的帮助!
    • 您是否通过 C++ 自定义操作尝试了 MsiGetProductInfo MSI API 函数?那可能是更好的选择。当心每用户安装和此类事情 - 这可能是一个问题(不是每台机器安装)。
    • 我正在使用 InstallScript 进行自定义操作 - 我现在不想参与介绍 C++。我之前评论中的方法使用 try/catch 来处理异常,所以我对此很满意。
    • 好的,我有this answer on C++ custom actions。它有更多相关主题的链接。从 C++ 调用 MsiGetProductInfo 会稍微复杂一点 - quick example
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 2010-12-05
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    相关资源
    最近更新 更多