如何通过 Powershell 更新注册表部分的 InstallShield 项目中的文件夹名称?
How to update the folder name in InstallShield project for Registry section by Powershell?
我有更新安装程序的产品名称、版本、产品代码、快捷方式名称等的 powershell 脚本。
但我不知道如何更新在 注册表 部分下创建的特定文件夹的名称,该部分本身存在于 系统配置 [= InstallShield 2015 中 InstallScript MSI 项目的 29=] 部分。
文件夹顺序是这样的形式-
HKEY_LOCAL_MACHINE\SOFTWARE\Demo.1.0.0
我希望使用 InstallShield 自动化功能将 12.1.0.0 文件夹值更新为 13.1.0.0。
如能就此问题提供任何帮助,我们将不胜感激。
我假设您正在使用 COM 自动化将新产品版本的生成作为构建系统的一部分进行自动化?有一秒钟我想知道你是否在安装后直接在注册表中四处寻找。我假设它是 COM 自动化。
我对 Installshield 对象模型进行了一些 "clunk" 的体验 - 提醒您一下。下面是一个关于如何使用 COM 自动化和 VBScript 自动创建新构建/发布的示例:How to change product code programmatically(作为参考,您已经从外观上看到了它).构建后我在保存功能方面遇到了问题。可能是我搞砸了。
我不会删除和添加组件,而是通过使用 [ProductVersion] property
创建一个新组件 "universal" 和 "reusable" 而不是硬编码产品版本(如果您进行此更改,则为组件提供一个新的 GUID,因为关键路径将移动)。
这意味着您的组件会将其写入注册表:HKLM\Software\Demo\[ProductVersion]
。当您编译应用程序的新版本时,这将是一个 "moving target"(关键路径将改变)。因此,您应该在每次构建时为组件生成一个新的 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
您必须小心使用此组件写入注册表的内容(由于密钥路径移动,它应该在重新安装/升级时覆盖所有内容)。 只写静态设置 - 应用程序不需要修改的设置。而且我会非常小心任何 许可证密钥 (可以在维修时重置,[=56=] 和更新)。
故事的寓意:始终测试所有安装模式:安装、卸载、修复、修改、self-repair、修补、主要升级、次要升级等...
另请注意,Installscript MSI 项目众所周知 有问题 ,坦率地说,我根本不推荐使用它们。根据我的经验,它们特别难以正确升级。请改用 Basic MSI 以获得更好的设置体验。对于企业部署来说,它要好得多。公司应用程序打包人员在处理 Installscript MSI 时长出了一口气。恐怕只是事实(主要问题是有问题的沉默运行,以及其他各种问题)。
UPDATE:只要组件的关键路径发生变化(绝对安装路径),就应该更改组件 GUID。这个答案试图更好地解释为什么这在技术上是必要的:Change my component GUID in wix?
我有更新安装程序的产品名称、版本、产品代码、快捷方式名称等的 powershell 脚本。
但我不知道如何更新在 注册表 部分下创建的特定文件夹的名称,该部分本身存在于 系统配置 [= InstallShield 2015 中 InstallScript MSI 项目的 29=] 部分。
文件夹顺序是这样的形式- HKEY_LOCAL_MACHINE\SOFTWARE\Demo.1.0.0
我希望使用 InstallShield 自动化功能将 12.1.0.0 文件夹值更新为 13.1.0.0。
如能就此问题提供任何帮助,我们将不胜感激。
我假设您正在使用 COM 自动化将新产品版本的生成作为构建系统的一部分进行自动化?有一秒钟我想知道你是否在安装后直接在注册表中四处寻找。我假设它是 COM 自动化。
我对 Installshield 对象模型进行了一些 "clunk" 的体验 - 提醒您一下。下面是一个关于如何使用 COM 自动化和 VBScript 自动创建新构建/发布的示例:How to change product code programmatically(作为参考,您已经从外观上看到了它).构建后我在保存功能方面遇到了问题。可能是我搞砸了。
我不会删除和添加组件,而是通过使用 [ProductVersion] property
创建一个新组件 "universal" 和 "reusable" 而不是硬编码产品版本(如果您进行此更改,则为组件提供一个新的 GUID,因为关键路径将移动)。
这意味着您的组件会将其写入注册表:HKLM\Software\Demo\[ProductVersion]
。当您编译应用程序的新版本时,这将是一个 "moving target"(关键路径将改变)。因此,您应该在每次构建时为组件生成一个新的 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
您必须小心使用此组件写入注册表的内容(由于密钥路径移动,它应该在重新安装/升级时覆盖所有内容)。 只写静态设置 - 应用程序不需要修改的设置。而且我会非常小心任何 许可证密钥 (可以在维修时重置,[=56=] 和更新)。
故事的寓意:始终测试所有安装模式:安装、卸载、修复、修改、self-repair、修补、主要升级、次要升级等...
另请注意,Installscript MSI 项目众所周知 有问题 ,坦率地说,我根本不推荐使用它们。根据我的经验,它们特别难以正确升级。请改用 Basic MSI 以获得更好的设置体验。对于企业部署来说,它要好得多。公司应用程序打包人员在处理 Installscript MSI 时长出了一口气。恐怕只是事实(主要问题是有问题的沉默运行,以及其他各种问题)。
UPDATE:只要组件的关键路径发生变化(绝对安装路径),就应该更改组件 GUID。这个答案试图更好地解释为什么这在技术上是必要的:Change my component GUID in wix?