【发布时间】:2015-04-21 07:26:33
【问题描述】:
我正在使用 Installshield 2014 和 2011。我正在使用主要升级和自动构建脚本来处理构建。 InstallShield 是独立的构建版本。两者兼得。
现在在 Windows 2003 服务器上使用 Installshield 2011 一切正常。我可以使用自动化界面打开一个项目,更改产品代码(用于主要升级),然后在构建安装程序之前将其保存。
这样的代码在一个 vbs 文件中:
Dim oISM, oGUID
Set oGUID = CreateObject("InstallShield.GUID")
Set oISM = CreateObject("IswiAuto17.ISWiProject")
oISM.OpenProject strInstallShieldProjectFile
oISM.ProductCode = "{" & oGUID.CreateGUID( ) & "}"
oISM.SaveProject : oISM.CloseProject : set oISM = Nothing
现在我们已经升级到 windows 2012 服务器和 InstallShield 2014。我已经仔细检查过,根据 InstallShield,唯一需要更改的是版本号(从 17 更改为 21)。
但现在没有任何效果。如果我将代码取出并放入它自己的 vbs 文件中进行测试并运行它,我会得到:
ActiveX 组件无法创建对象:'InstallShield.GUID'
在 google 上我看到这是在 64 位模式下运行的......但我不是。我在 32 位模式下运行 cmd 提示符。 http://helpnet.flexerasoftware.com/installshield18helplib/AutomationInterface64Bit.htm
我尝试使用以下命令调用脚本: %WINDIR%\SYSWOW64\cmd.exe /c cscript
这里建议: How do I run a VBScript in 32-bit mode on a 64-bit machine?
和其他地方。这不起作用,因为我遇到了同样的错误。
我尝试删除该行,因为我确信我可以用另一种方式创建一个 guid,然后重新运行它。
然后当它尝试创建项目时我得到了这个: 未知的运行时错误:'CreateObject'
谷歌再次出现,我检查了: https://community.flexerasoftware.com/showthread.php?189788-Automation-error
和其他几个。我尝试确保使用 regsvr32 注册了 dll,它说它是成功的。但是重新运行后,它给出了同样的错误。
我尝试直接处理 InstallShield 文档中的命令,以确保没有拼写错误,但同样的错误。
我什至尝试切换这里提到的“sw”的大小写: Installshield Automation is failing while running vbscript with error unable to create object
同样的错误。
我也尝试切换到 powershell,因为 powershell 更易于调试和阅读。
powershell代码很简单,如下:
$oIsm = new-object -comobject IswiAuto21.ISWiProject
$oISM.OpenProject("$file")
$oISM.ProductCode = "{" + [guid]::NewGuid() + "}"
$oISM.SaveProject(); $oISM.CloseProject(); $oISM = $null
但这也不起作用,尽管这些说它应该: https://community.flexerasoftware.com/showthread.php?190769-Automation-using-Powershell http://blogs.flexerasoftware.com/installtalk/2011/01/getting-started-with-installshield-automation-and-powershell.html
当我使用 32 位 powershell 时出现此错误:
new-object :由于以下错误,从 IClassFactory 创建具有 CLSID {78D393F9-76E3-438C-9CAB-6664EF5FE1F2} 的 COM 组件实例失败: 来自 HRESULT 的 800a801d 异常:0x800A801D。
如果我只运行 vbs 而没有 cmd 提示,我还会在弹出框中看到 800A801D 的错误。
我该如何解决这个问题?我想使用 powershell,但此时 vbs 修复也会有所帮助。我已经尝试了我能想到的一切,谷歌说我做得对(32 位 powershell/cmd、注册 dll、创建对象等)。
【问题讨论】:
标签: powershell vbscript installshield