2015-02-19 3 views
1

Я работаю с Installshield 2014 и 2011. Я использую основные обновления и сценарии автоматической сборки для обработки сборки. InstallShield - это отдельная сборка ver. для обоих.InstallShield Automation не может создать объект

Теперь все отлично работало с Installshield 2011 на серверах Windows 2003. Я мог бы использовать интерфейс автоматизации для открытия проекта, изменения кода продукта (для основного обновления), а затем сохранить его прямо перед установкой установщика.

Код таковой в 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 

Теперь мы модернизированных к окнам 2012 серверов и InstallShield 2014. Я проверил и в соответствии с InstallShield единственное изменение необходимо, так это номер версии (17 изменяется на 21).

Но теперь ничего не работает. Если взять код и положить его в его собственном файле VBS для тестирования и запустить его, я получаю это:

компонент ActiveX не может создать объект: «InstallShield.GUID»

Глядя на гугле я вижу это от запуска в режиме 64 бит .... но я не. Я запускаю подсказку cmd в 32-битном режиме. http://helpnet.flexerasoftware.com/installshield18helplib/AutomationInterface64Bit.htm

Я попытался назвать сценарий с: % WINDIR% \ SysWOW64 \ cmd.exe/с Cscript

как предложено здесь: How do I run a VBScript in 32-bit mode on a 64-bit machine?

и других местах. Это не сработало, поскольку я получил ту же ошибку.

Я попытался удалить эту строку, так как я уверен, что смогу создать дорожку другим способом и повторить ее.

Тогда я получил это, когда он пытается создать проект: Неизвестная ошибка во время выполнения: «CreateObject»

Еще раз Google придумал, и я проверил: https://community.flexerasoftware.com/showthread.php?189788-Automation-error

и пара других. Я попытался обеспечить регистрацию dll с помощью regsvr32, и он сказал, что он был успешным. Но после повторения он дал ту же ошибку.

Я попытался напрямую выполнить команду из документации InstallShield, чтобы не было ошибок орфографической ошибки, но снова такая же ошибка.

Я даже попытался переключая случае «ЮЗ», как указано здесь: 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 я получаю эта ошибка:

новый объект: создание экземпляра COM-компонента с CLSID {78D393F9-76E3-438C-9CAB-6664EF5FE1F2} из IClassFactory не выполнено из-за следующая ошибка: 800a801d Исключение из HRESULT: 0x800A801D.

Если я запускаю только vbs без подсказки cmd, я также вижу ошибку 800A801D в всплывающем окне.

Как это исправить? Я бы хотел использовать powershell, но исправление vbs также помогло бы в этот момент. Я пробовал все, что мог, и Google говорит, что я делаю это правильно (32-разрядная powerhell/cmd, регистрация DLL, создание объекта и т. Д.).

ответ

3

Вы установили интерфейс автоматизации? Как правило, это необязательная функция, которая не установлена ​​при установке InstallShield.

+0

Это было причиной. Когда мой менеджер установил его, он не установил интерфейс (только основные файлы). Это заставило главную dll существовать и регистрироваться, но ничего больше. Итак, когда я проверил, он утверждал, что все было хорошо, но под ним не было. Исправлена ​​проблема с установкой и установкой интерфейса. Спасибо за помощь. :) –

+0

Ваш прием. Не возражаете ли вы принять ответ? –

1

Обычно HRESULT должен сказать вам, что не так, или быть настолько общим, что это не поможет. В этом случае это немного загадка, поскольку я не нашел ее определения нигде. Ведущий 0x800A... указывает FACILITY_CONTROL, а конечный ...801d соответствует хвосту TYPE_E_LIBNOTREGISTERED (0x8002801D), но я не знаю, является ли это значимым. К сожалению, FACILITY_CONTROL определяется элементом управления, который выдает ошибку, и это неясно.

Давайте попробуем выяснить, что случилось. Моя ставка заключается в регистрации COM. Если вы хотите, вы можете перейти к вероятному исправлению, запустив regsvr32 C:\...\System\ISWiAutomation21.dll.

Итак, давайте следовать за тем, что будет CreateObject("IswiAuto21.ISWiProject"). Сначала он должен посмотреть вверх ProgID:

C:\>reg query HKCR\ISWiAuto21.ISWiProject\Clsid 

HKEY_CLASSES_ROOT\ISWiAuto21.ISWiProject\Clsid 
    (Default) REG_SZ {78D393F9-76E3-438C-9CAB-6664EF5FE1F2} 

Затем он должен посмотреть вверх CLSID, и в этом случае его ключ InprocServer32:

C:\>reg query HKCR\Clsid\{78D393F9-76E3-438C-9CAB-6664EF5FE1F2}\InprocServer32 

HKEY_CLASSES_ROOT\Clsid\{78D393F9-76E3-438C-9CAB-6664EF5FE1F2}\InprocServer32 
    (Default) REG_SZ C:\...\ISWiAutomation21.dll 
    ThreadingModel REG_SZ Apartment 

Если какой-либо из них отсутствует, то это будет не можете найти COM-сервер. Кроме того, TypeLib подключ и тип ссылки Библиотека это являются важными:

C:\>reg query HKCR\Clsid\{78D393F9-76E3-438C-9CAB-6664EF5FE1F2}\Typelib 

HKEY_CLASSES_ROOT\Clsid\{78D393F9-76E3-438C-9CAB-6664EF5FE1F2}\Typelib 
    (Default) REG_SZ {92278CC1-987E-4A01-940C-47DCADF27496} 


C:\>reg query HKCR\Typelib\{92278CC1-987E-4A01-940C-47DCADF27496}\1.1\0\win32 

HKEY_CLASSES_ROOT\Typelib\{92278CC1-987E-4A01-940C-47DCADF27496}\1.1\0\win32 
    (Default) REG_SZ C:\...\ISWiAutomation21.dll 

Если какой-либо из этой информации отсутствует, то придется ремонтировать. Самому COM-серверу, возможно, потребуется пробовать несколько дополнительных идентификаторов в этот момент, поэтому есть вероятность, что даже если это подмножество в порядке, есть другие, которые отсутствуют или повреждены. Самоопределение COM-сервера должно исправить это. Поэтому следует запустить ремонт установки.

Обратите внимание, что все эти запросы были выполнены с использованием 32-разрядной команды C:\Windows\SysWow64\reg.exe, или вы можете просматривать реестр визуально с помощью C:\Windows\SysWow64\regedit.exe.

+0

Возможно, он забыл установить его? –

+0

Я сделал это и получил то же самое, что и вы. Единственная разница заключалась в следующем: InprocServer32 REG_MULTI_SZ ZV 7Pm6 PA9} [т, 5xy9OCoreFiles> Q = 6'dAqEj9 ~, ^) т = -R + ThreadingModel REG_SZ квартира –

+1

@JeremyStyers:! Хм. Это различие, вероятно, связано с тем, что я тестировал свою среду разработки, а не на правильно установленной машине; дескриптор darwin отображается только через установки MSI. Так что это действительно доказательство того, что он был установлен; Я полагаю, что ремонт не помог? –

Смежные вопросы