【问题标题】:How to change product code programmatically如何以编程方式更改产品代码
【发布时间】:2017-12-29 12:18:29
【问题描述】:

我已经为自动构建创建了 bat 文件。它是我的产品的创建安装程序。但问题是,在运行自动构建脚本之前,我必须从 install shield 手动更改产品代码。那么,有没有办法自动更改产品代码?因为除了产品代码,一切都是自动的。

【问题讨论】:

  • 您使用的是哪个版本的 Installshield?
  • 您使用的是 MSBuild 还是 ISCmdBld.exe?
  • 我正在使用 install shield 独立构建
  • @SteinÅsmul: insall shield 2013

标签: automation windows-installer installshield


【解决方案1】:

正如 Phil 所说,您可以通过 Installshield 的 COM 自动化界面 执行此操作,但也有其他方法,如下所述:Installshield Build Automation

基本上

  1. 上面的链接显示了如何使用独立构建可执行文件 ISCmdBld.exe 的小示例 - 您可能已经在使用它。

    • 类似:"[PATHHERE]ISCmdBld.exe" -p "MyInstaller.ism" -r SingleImage -y "1.0.0.13" -z ProductCode=%guid%
    • 请检查上面的链接 - 我从未使用过 ISCmdBld.exe 来选择 COM 自动化。
  2. 链接的答案还解释了如何使用 msbuild,请阅读Urman's answer

  3. 最后,您可以使用 COM 自动化界面和 VBScript(或 Javascript?),我在下面添加了一个小示例来了解其工作原理。

    李>

我没有 Installshield 2013,但这里是一个非常粗略的草图,说明如何通过 使用 VBScript 的 COM 自动化自动化最新版本 2016:

' On Error Resume Next

Set isproject = CreateObject("ISWiAuto23.ISWiProject")
isproject.OpenProject "C:\InstallShield 2016 Projects\TestProject.ism", False

Set isproductconfig = isproject.AddProductConfig("MyNewProduct_1.0.16")
isproductconfig.ProductName = "MyNewProduct_1.0.16"
isproductconfig.ProductVersion = "1.0.16"
isproductconfig.ProductCode = isproject.GenerateGUID
' lots of properties to set, the above should normally suffice I think...

Set isrelease = isproductconfig.AddRelease("MyNewRelease_1.0.16") 
isrelease.Compressed = True
isrelease.SetupEXE = True
' lots of properties to set...

' Save and build project
isproject.SaveProject ' For some reason the project won't save properly after it is built
isrelease.Build
isproject.SaveProject

' Report error status
WScript.Echo "Number of Build Errors: " & CStr(isrelease.BuildErrorCount)
WScript.Echo "Number of Build Warnings: " & CStr(isrelease.BuildWarningCount)

isproject.CloseProject

这个脚本没有经过彻底的测试,奇怪的是,新产品配置和发布不会保存,除非您在触发构建之前保存。这可能是我搞混了一些简单的东西 - 或者它可能是工具中的一个错误(它不会是第一个)。

接受它,希望它能让你自己解决wilburys错误)。我认为如果您将 ISWiAuto23.ISWiProject 更改为 IswiAuto20.ISWiProject 以匹配 Installshield 2013 COM 服务器版本,它可能会运行。

至关重要的是,您必须从 32-bit CScript.exe / WScript.exe 运行 VBScript(不要问我为什么)。只需将C:\Windows\SysWOW64\cscript.exe 的快捷方式放在桌面上进行测试,然后将脚本拖放到上面,或者更好的是,打开命令提示符并转到C:\Windows\SysWOW64(信不信由你,这是 32 位文件夹 -和 the System32 folder is 64 bit (!) - 仅在 Windows 中!)然后键入 cscript.exe [FullPathToVBScript]。显然记得在运行脚本之前在 Installshield GUI 中关闭您的 ISM 文件。

我喜欢这样一个事实,即您可以将新版本和产品配置保存在 *.ism 文件中,这样您就有了已编译版本的记录。我不确定 ISCmdBld.exe 的作用。

【讨论】:

  • 数十种语言支持COM。 Perl、Python、NodeJS、C++/C#...是的,仅支持 32 位。 :( 我会简单地使用 IsCmdBld.exe -z Property=Value 而没有那么复杂。(也就是说,我真的是 MSBuild 的拥护者,所以我会使用属性函数来生成 GUID 并使用 PropertyOverrides 将其传递到构建中。
  • 试试 MSBuild 可能是个好主意。我会试试的,如果我有机会的话。至于COM 语言:我的经验是,除非您使用的语言在所讨论的 COM 对象模型中经过良好测试,否则您会遇到完全的 X 文件问题。例如,我对 Javascript 和 Windows Installer 对象模型非常陌生(所有 MSI SDK 示例都在 VBScript 中 - 所以我们知道它们最初测试的是什么)。据我所知,Javascript 可能更适合 Installshield。或者 C# 可能也经过了很好的测试,无法判断。我听说人们在尝试 Perl 和 COM 时遇到了很多困难。
【解决方案2】:

我认为您应该将 InstallShield 自动化用于此类事情,例如公开您正在构建的 MSI 的 ProductCode 的 ISWiProductConfig 对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多