Automation 如何以编程方式更改产品代码

Automation 如何以编程方式更改产品代码,automation,windows-installer,installshield,Automation,Windows Installer,Installshield,我已经为自动构建创建了bat文件。这是我的产品的创建安装程序。但问题是,在运行自动构建脚本之前,我必须从InstallShield手动更改产品代码。那么,有没有办法自动更改产品代码?因为除了产品代码之外,所有东西都是自动的 我认为您应该使用InstallShield自动化来实现这类功能,例如isWipProductConfig对象,它公开您正在构建的MSI的产品代码 正如Phil所说,您可以通过Installshield的COM自动化界面来实现这一点,但也有其他方法,如本文所述: 基本上是: 上

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

我认为您应该使用InstallShield自动化来实现这类功能,例如isWipProductConfig对象,它公开您正在构建的MSI的产品代码

正如Phil所说,您可以通过Installshield的COM自动化界面来实现这一点,但也有其他方法,如本文所述:

基本上是

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

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

  • 最后,您可以使用COM自动化接口和VBScript(或Javascript?),我在下面添加了一个小示例,介绍如何使用它

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

    “下一步恢复时出错” 设置isproject=CreateObject(“ISWiAuto23.ISWiProject”) isproject.OpenProject“C:\InstallShield 2016 Projects\TestProject.ism”,错误 设置isproductconfig=isproject.AddProductConfig(“MyNewProduct_1.0.16”) ISPProductConfig.ProductName=“MyNewProduct\u 1.0.16” isproductconfig.ProductVersion=“1.0.16” isproductconfig.ProductCode=isproject.GenerateGUID “需要设置很多属性,我认为上面的内容通常就足够了。。。 设置isrelease=isproductconfig.AddRelease(“MyNewRelease_1.0.16”) isrelease.Compressed=True isrelease.SetupEXE=True '要设置的属性很多。。。 '保存并生成项目 isproject.SaveProject'由于某些原因,项目在生成后无法正确保存 isrelease.Build isproject.SaveProject '报告错误状态 WScript.Echo“生成错误数:&CStr(isrelease.BuildErrorCount) WScript.Echo“生成警告数:&CStr(isrelease.BuildWarningCount) isproject.CloseProject 这个脚本没有经过彻底的测试,奇怪的是,除非在触发构建之前进行保存,否则不会保存新的产品配置和版本。这可能是我弄混的一些简单的东西,也可能是工具中的一个bug(这不是第一个)

    就这样吧,希望它能让你自己解决问题(bug)。我认为如果您将
    ISWiAuto23.ISWiProject
    更改为
    IswiAuto20.ISWiProject
    以匹配Installshield 2013 COM服务器版本,它可能会运行

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


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

    您使用的是什么版本的Installshield?您使用的是MSBuild还是ISCmdBld.exe?我使用的是Installshield standalonebuild@SteinÅsmul:insall shield 2013Dozens of languages support COM。Perl、Python、NodeJS、C++/C#。。。是,仅支持32位:(我只需使用IsCmdBld.exe-z Property=Value,而不需要那么复杂。(也就是说,我确实是一个MSBuild倡导者,所以我会使用属性函数生成GUID,并使用PropertyOverrides将其传递到生成中。尝试MSBuild可能是一个好主意。如果有机会,我会尝试。至于COM语言:我的经验是,除非使用经过良好测试的语言,否则会出现X文件问题有问题的COM对象模型。例如,我对Javascript和Windows Installer对象模型非常陌生(所有MSI SDK示例都是VBScript格式的,因此我们知道它们最初使用的是什么)。据我所知,Javascript可能更适合Installshield。或者C#可能也经过了很好的测试,无法确定。我听说人们在尝试使用COM的Perl时遇到了很多困难。