【问题标题】:InstallShield MSI installer can not repair from Add Remove Programs, but works from installerInstallShield MSI 安装程序无法从“添加删除程序”修复,但可以通过安装程序进行修复
【发布时间】:2023-03-25 18:19:01
【问题描述】:

我正在使用 Installshield Spring 2012 创建一个 MSI 安装程序。我的安装程序运行良好,除了一个问题。如果我删除了安装中的某个文件,然后从“添加和删除程序”运行修复,则修复失败并出现错误:

错误 27506。执行 SQL 脚本 SqlScript1.sql 时出错。第 10 行。发生文件激活错误。物理文件名“SEICube.mdf”可能不正确。诊断并更正其他错误,然后重试该操作。 (5105)

如果我从安装程序中运行修复,那么,如果我再次双击我的安装程序并选择修复,它会完美运行并且我不会收到任何错误。

有什么想法吗?

谢谢。

【问题讨论】:

    标签: installation windows-installer installshield


    【解决方案1】:

    在两种情况下记录安装程序并进行比较。我能想到的主要区别是 ARP/PF 中的修复按钮将以静默模式运行,因此安装 UI 序列永远不会运行。修改按钮(或双击 MSI )将启动 UI 序列,然后您选择修复。它可能是在 UI 中触发的自定义操作使其工作。实际上,它应该静默工作,因此自定义操作不合适。

    其他可能相关的想法是 MSI 不会保留属性,但 InstallShield 会在连接字符串属性的情况下保留。如果您使用 SSPI 而不是数据库登录,这可能会导致各种问题,具体取决于运行安装程序的人员。

    另一个想法是因为数据库层可能是另一台服务器,在安装程序中使用 MDF / LDF 文件并不好。数据库应完全由连接编写脚本和创建。此外,脚本应该非常健壮,以至于它们支持从任何以前的模式安装、卸载、重新安装、修复和升级到当前模式。

    【讨论】:

    • 我想我找到了问题所在。我不知道如何解决它。我有一个设置属性的自定义操作类型 51。它从 [INSTALLDIR] 中获取值并将其设置为 IS_DBFILES_PATH。看起来当我从修复运行它时,IS_DBFILES_PATH 从未正确设置,我认为是因为当自定义操作运行时,尚未添加 INSTALLDIR。从安装程序运行时,该属性得到正确设置。此属性在我的脚本中用于查找 MDF 文件。我不确定我能做些什么来让它发挥作用。 INSTALLDIR 在什么时候设置?
    • 我只是将自定义操作进一步向下移动,就成功了。
    • 目录属性由 CostFinalize 设置。 CostFinalize 在您的 UI 中运行并传递给 Execute。当你无声运行时,它还没有运行,所以你有一个竞争条件。
    猜你喜欢
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    相关资源
    最近更新 更多