【发布时间】:2019-02-19 07:49:55
【问题描述】:
我需要修改“IBM i Access for Windows”的 MSI 设置的安装行为。该设置是使用 InstallShield 创建的。在安装过程中,安装程序通过“链接”触发另外两个 MSI 安装。传递给 MSIEXEC.EXE 以执行这两个安装的参数由安装中包含的 DLL 中的自定义操作加载。参数最终位于 MSI 属性中。
我想更改该属性中的值以在启动链接安装之前操作命令行。这可能吗?如果是这样,怎么做?我创建一个读取和修改属性的外部 DLL 没有问题,但是我不知道如何将它与现有安装集成 - 我必须修改哪些表以及如何,我应该将 DLL 放在哪里, ...
编辑 1:澄清这一点:我想修改传递给链式 MSI 安装的参数。它们独立于我传递给主安装的参数,并从作为安装一部分的 DLL 加载。
EDIT 2:我已经上传了普通的MSI + 相关的log file。我使用“/qn”开始主安装以抑制所有消息。这没有问题,链式安装在没有可见提示的情况下执行。卸载软件时会出现问题(再次使用“/qn”)。远程自定义操作从 DLL 加载(第 6417 行):
MSI (s) (10:28) [09:00:45:643]: Invoking remote custom action. DLL: C:\Windows\Installer\MSIA4BD.tmp, Entrypoint: ISChainPackages
从 DLL 加载的命令行指定使用参数“/qb”而不是“/qn”调用 MSIEXEC.EXE(第 6958 行):
MSI (s) (10!60) [09:00:46:033]: PROPERTY CHANGE: Adding IS_CHAINER_POST_COMMANDLINE property. Its value is '/l"c:\temp\IBM_iAccess_7.1_Uninstall.log" /qb /x{CCA40632-843E-48C6-B14F-E1070015D87C} ...
而且由于 MSI 安装程序锁定了一个文件,因此会弹出一个消息框,该消息框由链接的 MSI 的卸载触发(第 44046 行):
MSI (s) (10:C0) [09:01:05:553]: RESTART MANAGER: Did detect that the custom action server with process ID 2352 holds file[s] in use, so a reboot will be necessary.
MSI (s) (10:C0) [09:01:05:553]: Note: 1: 1610
MSI (s) (10:C0) [09:01:11:224]: RESTART MANAGER: The user chose to go on with the installation, although a reboot will be required.
The setup must update files or services that cannot be updated while the system is running. If you choose to continue, a reboot will be required to complete the setup.
IBM website 上不再提供此软件 7.1 版的安装文件。只有当前的版本,我还没去查最新版本是否还有问题,因为业务部门要求我打包v7.1。
【问题讨论】:
-
最初的印象是:确实非常复杂。在我多看这个之前,please check this itninja.com software entry 看看是不是同一个软件。我对这个特定的软件一无所知。请务必阅读底部评论。我肯定会检查是否有支持协议,并验证您是否可以使用最新的软件版本进行安装。这种笨重的东西可能已经修复了吗?谁知道呢。
-
是语言属性的问题吗? (MRI2924 或类似的东西)或者你想通过其他设置?更多包数据库条目:itninja.com/question/…(参见 cmets 部分)和 itninja.com/question/…。