首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用MSI转换更改从DLL加载的MSI属性的值。

使用MSI转换更改从DLL加载的MSI属性的值。
EN

Stack Overflow用户
提问于 2019-02-19 07:49:55
回答 3查看 941关注 0票数 1

我需要修改用于"IBM for Windows“的MSI安装程序的安装行为。安装程序是使用InstallShield创建的。在安装过程中,安装程序通过“链接”触发另外两个MSI安装。传递给MSIEXEC.EXE以执行这两个安装的参数由安装中包含的DLL中的自定义操作加载。这些参数以MSI属性结束。

在启动链接安装之前,我希望更改该属性中的值,以操作命令行。这个是可能的吗?如果是这样的话,是怎么做的?创建读取和修改属性的外部DLL没有问题,但我不知道如何将其与现有安装集成--我必须修改哪些表以及如何将DLL放在哪里,

编辑1:为了澄清这一点:我想修改传递给链式安装的参数。它们独立于我传递给主安装的参数,并从安装的一部分DLL加载。

编辑2:我已经上传了普通的MSI +相关的日志文件。我以"/qn“开始主安装,以抑制所有消息。这是没有问题的,链式安装在没有可见提示的情况下被执行。卸载软件(同样使用"/qn")时会出现问题。远程自定义操作从DLL加载(第6417行):

代码语言:javascript
运行
复制
MSI (s) (10:28) [09:00:45:643]: Invoking remote custom action. DLL: C:\Windows\Installer\MSIA4BD.tmp, Entrypoint: ISChainPackages

从DLL加载的命令行指定使用参数"/qb“而不是"/qn”调用/qn(第6958行):

代码语言:javascript
运行
复制
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行):

代码语言:javascript
运行
复制
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.

此软件的7.1版本的安装文件在IBM网站上不再可用。只有目前的版本是,而且我还没有调查最新版本是否仍然存在问题,因为业务部门要求我打包v7.1。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-27 16:26:26

解决此问题的一种方法是创建一个新的自定义操作,它执行存储在VBScript表中的Binary代码,并将新的自定义操作放在ISChainPackagePrepare之后。VBScript代码将读取IS_CHAINER_POST_COMMANDLINE的值并替换Replace()函数中指定的值。

VBScript代码可能如下所示:

代码语言:javascript
运行
复制
Option Explicit

Function ReplacePropVal()
    dim propvalue
    dim newvalue
    propvalue = Session.Property("IS_CHAINER_POST_COMMANDLINE")
    newvalue = Replace(propvalue,"/qb","/qn")
    Session.Property("IS_CHAINER_POST_COMMANDLINE") = newvalue
End Function

您希望给新的自定义操作一个6种类型,以指示自定义操作数据作为VBScript存储在Binary表中。自定义操作Source是对Binary表中的Name的引用。自定义操作的Target值需要是VBScript函数的名称,在本例中是ReplacePropVal

之后,使用与InstallExecutionSequence表相同的名称将新的自定义操作放置在CustomAction表中。还要确保给它一个更高的Sequence值作为ISChainPackagePrepare。我建议将SequenceISChainPackagePrepare值增加1,将其放在紧接其后的位置。

更改表并生成新转换之后,只需运行包,并通过在TRANSFORMS公共属性中指定其路径来应用新的转换,您的属性值就应该被更改。

票数 2
EN

Stack Overflow用户

发布于 2019-03-02 03:46:14

我认为这里最理想的方法是转换链式包定义。UI级别(文档)存储在ISChainPackage表的选项列的前两位中,所以您所要做的就是更改该值。特别是,您可以将这些位从ecoUIBasic (0)更改为ecoUINone (1),这应该与将1添加到当前值一样简单。还有ecoUIReduced (2)和ecoUIFull (3)。

如果ISChainPackage.Options被正确修改,所需的IS_CHAINER_POST_COMMANDLINE将为您生成,您将不必添加辅助自定义操作来将/qb更改为/qn。(赞扬塞维提出的功能解决方案。)

票数 0
EN

Stack Overflow用户

发布于 2019-02-19 15:28:47

如果这是一个高级或高级UI Setup.exe,请检查该链接如何传递属性。 包数据库条目( iAccess和其他软件的软件重新打包技巧):

接近:这个DLL自定义操作是做什么的?它会创建许可证密钥吗?很多时候,这些事情已经被发现并解决了很多次。为了检查这一点,我通常使用以下方法来找到解决方案:

  • 文件提取:尝试从安装程序中提取文件,并查找描述正确部署的帮助文件。"Large Scale Deployment.chm","Installation Command Line Parameters.chm",等..。或现成的转换或命令行文件示例(Install.cmd).。
  • look at the IBM entries. 部署站点:检查https://www.itninja.com/company/browse/i (软件重新打包技巧-)几个看起来相关的条目,这里有一个)。
  • 论坛:查看它们的支持论坛或在线支持 -如果可用的话。
  • phone :和供应商打电话。有时很有帮助,往往是浪费时间。询问从支持处发送的部署相关信息。如果你有支持协议的话就这么做?

请参阅下面关于文件解压缩的部分。

Setup.exe Switches:我这里有一个类似的或相关的答案,其中我还提到了setup.exe命令行开关:带参数的静默运行安装程序(.exe)

Logging:如果自定义操作没有创建动态的东西(惟一的许可证密钥、机器锁定标识等),那么您可以尝试查找记录安装程序生成的内容,并查找日志文件中使用的命令行。模拟样本:

代码语言:javascript
运行
复制
MSI (s) (AC:00) [00:00:00:00]: Command Line: TARGETDIR=C:\ SHORTCUTDIR=C:\Documents and Settings\All Users\Start Menu\Programs\Test ACTION=INSTALL 

文件提取:这是Installshield Suite项目吗?您首先提取了嵌入式文件和MSI文件吗?:以编程方式提取InstallShield setup.exe的内容

Setup.exe?:Installshield setup.exe文件可以是很多不同的东西(解释不同的setup.exe风格):关于使用使用Installshield 2013 ( Setup.exe )项目文件生成的Setup.exe进行静默安装

链接

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54761131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档