【问题标题】:How can I retrieve the value of a MSI property on the time of Uninstallation?如何在卸载时检索 MSI 属性的值?
【发布时间】:2012-05-16 09:34:27
【问题描述】:

我有一个应用程序的安装程序,我在其中使用了一些自定义操作。 在安装时,我一直在使用一些自定义 MSI 属性,例如 DBHOST 等来确定数据库主机。

默认值为 localhost。

但我在安装时一直通过命令行将此 DBHOST 属性设置为其他值(如 192.168.1.3)。并且安装与通过命令行设置的属性正常工作。

但是当我使用的时候

    MsiGetProperty

在卸载期间必须执行的自定义函数,我得到了默认值(localhost),而不是我在安装时通过命令行设置的值(192.168.1.3)

任何人都可以帮助我吗?为什么会这样。? 卸载时是否需要执行任何其他操作才能获得相同的 MSI 属性值?

提前致谢...

【问题讨论】:

    标签: windows-installer installshield installshield-2009


    【解决方案1】:

    属性值不是持久的,这意味着在卸载时它不会记住它在安装过程中的最后一个值,它将使用其默认值。最好和更简单的解决方案是将此值写入注册表项,并在卸载期间使用注册表搜索检索它。

    【讨论】:

    • 但是我们可以使用我们在安装时设置的自定义值来获得某些属性(如 INSTALLDIR)的准确值,对吗?是否与注册表搜索相同?
    • 附加到安装文件夹的属性由 Windows Installer 存储,因为它们附加到包中的组件。对于独立属性,如 DBHOST,Windows Installer 不提供缓存机制,在维护期间使用其安装值的唯一方法是保存它,最简单的位置是注册表值,并在包被安装时使用注册表搜索检索它再次启动。
    • 有没有什么地方我可以确切地看到 MSI 引擎缓存了哪些 MSI 属性,这样我就不会浪费时间为它们做自己的逻辑了?如果 InstallShield MSI 属性也存在类似的资源,那就太好了,因为我无法确定 IS_SQLSERVER 是否被缓存。
    • 正如我在上一条评论中所说,操作系统只存储引用安装路径的属性,默认情况下不会缓存安装过程中使用的任何其他属性。要确定属性是否被缓存,只需安装包并在属性中设置一个与默认值不同的值,然后在维护时再次启动包并检查属性值(在日志中或将其设置为显示在对话框)
    【解决方案2】:

    由于您提到 DBHOST,如果您使用 InstallShield 的本机 SQL 脚本功能,他们会在其基础架构中预先编写自定义操作,以保留 SQL 连接所需的属性,以供后续在维修、小升级和卸载期间使用。

    默认属性名称是 IS_SQLSERVER_SERVER。

    顺便说一句,DBHOST 是很无辜的,但要意识到一些持久化数据(例如 IS_SQLSERVER_USERNAME 和 IS_SQLSERVER_PASSWORD )是敏感的,需要加密、解密。 InstallShield 会自动执行此操作。安全性是否足以满足您的需求,由您自行审查。

    【讨论】:

    • 在他们的文档中是否有某个地方我可以看到哪些属性 installshield 自身存在,哪些不存在?
    猜你喜欢
    • 2013-10-10
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 2011-05-03
    • 2017-09-17
    相关资源
    最近更新 更多