1

在此处输入图像描述

我有更新安装程序的产品名称、版本、产品代码、快捷方式名称等的 powershell 脚本。

但我不知道如何更新在注册表部分下创建的特定文件夹的名称,该文件夹本身位于 InstallShield 2015 中InstallScript MSI项目的系统配置部分下。

文件夹的顺序是这种形式 - HKEY_LOCAL_MACHINE\SOFTWARE\Demo\12.1.0.0

我希望使用 InstallShield 自动化功能将12.1.0.0文件夹值更新为13.1.0.0 。

对此问题的任何帮助将不胜感激。

4

1 回答 1

1

我假设您正在使用 COM 自动化自动生成新产品版本作为构建系统的一部分?有一秒钟,我想知道您是否在安装后直接在注册表中四处寻找。我认为它是 COM 自动化。

我在 Installshield 对象模型中遇到了一些“笨拙”的问题 - 只是警告您。以下是如何使用 COM 自动化和 VBScript 自动创建新版本/发布的示例:如何以编程方式更改产品代码(作为参考,您已经通过它的外观获得了这个)。构建后保存功能出现问题。这可能是我搞砸了。

我不会删除和添加组件,而是通过使用而不是硬编码产品版本来制作一个“通用”和“可重用”的新组件来简化这一点[ProductVersion] property(当您进行此更改时为组件提供一个新的 GUID,因为关键路径将移动)。

在此处输入图像描述

这意味着您的组件会将其写入注册表:HKLM\Software\Demo\[ProductVersion]. 当您编译应用程序的新版本时,这将是一个“移动目标”(关键路径会改变)。因此,您应该在每次构建时为组件生成一个新的 GUID。这很容易通过自动化实现(比添加和删除在我的经验中容易出现运行时错误和异常的组件更容易和更可靠):

' This is for Installshield 2018 - change 24 to 23, 22, etc... depending on IS version
Set isproject = CreateObject("ISWiAuto24.ISWiProject")
isproject.OpenProject "C:\InstallShield 2018 Projects\My Project Name-6.ism", False

' Retrieve existing component and assign a new GUID. Should be all that is needed?
Set mycomponent = isproject.ISWiComponents.Item("NewComponent1")
mycomponent.Guid = isproject.GenerateGUID()

isproject.SaveProject
isproject.CloseProject

您必须小心使用此组件写入注册表的内容(由于密钥路径移动,它应该在重新安装/升级时覆盖所有内容)。只写静态设置——应用程序不需要修改的设置。而且我会非常小心地使用任何许可证密钥(可以在修复、自我修复和更新时重置)。

故事的寓意:始终测试所有安装模式:安装、卸载、修复、修改、自我修复、修补、大升级、小升级等......


另请注意,Installscript MSI项目是有缺陷的,坦率地说,我完全不推荐使用它们。根据我的经验,它们特别难以正确升级。改用基本 MSI以获得更好的设置体验。这对于企业部署来说要好得多。企业应用程序打包者在得到一个 Installscript MSI 来处理时,深深地叹了口气。恐怕只是事实(主要问题是有问题的静默运行,以及其他各种问题)。


更新:只要组件的关键路径(绝对安装路径)发生更改,就应该更改组件 GUID。这个答案试图提供一个更好的解释,为什么这在技术上是必要的:Change my component GUID in wix?

于 2018-03-10T14:06:28.677 回答