Я пытаюсь автоматизировать установку MSI на моем сервере, однако, прежде чем установка может быть продолжена, мне нужно удалить предыдущую версию с сервера.
Поискав в Интернете, я обнаружил, что WMIC является необходимым инструментом, но, похоже, возникла проблема с настройкой WMI на сервере. Выполнение следующей команды приводит к ошибке:
командная строка> wmic
затем внутри инструмента
/ trace: на
продукт получает название
Это возвращает длинную строку успехов и одну неудачу:
FAIL: IEnumWbemClassObject->Next(WBEM_INFINITE, 1, -, -)
Line: 396 File: d:\nt\admin\wmi\wbem\tools\wmic\execengine.cpp
Node - ENTECHORELDEV
ERROR:
Code = 0x80041010
Description = The specified class is not valid.
Facility = WMI
Я пытаюсь запустить это на стандартной установке Windows Server 2003 R2 с правами администратора.
Спасибо
Стю
Есть много способов автоматизировать (де) установку MSI, и WMIC является одним из них. Вы думали о более простом подходе, например о пакетном файле, который:
rem Uninstall old program:
msiexec /qb /x {05EC21B8-4593-3037-A781-A6B5AFFCB19D}
rem Install new program:
msiexec /qb /i MyNewProgram.msi
(конечно, заменив указанный выше GUID на GUID вашей программы или Uninstall
имя ключа).
Или вы можете использовать Интерфейс автоматизации для установщика Windows.
Или вы можете использовать WMI через VBScript или PowerShell, чтобы добиться того же, что и WMIC. Но похоже, что WMI может быть немного заброшен.
У меня нет исправления того, что я вижу, но у меня есть пара вещей, которые вы можете попробовать. Недавно я потратил немного времени на устранение проблем с WMI, так что, возможно, здесь сработает пара тех же методов.
Во-первых, вот VBScript, который должен выводить то же, что и product get name
. Сохранить в файл getProductNames.vbs
и выполнить его.
Option Explicit
Dim strComputer
Dim objWMIService, colProducts, objProduct
Dim arrstrProducts(), i
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProducts = objWMIService.ExecQuery("Select * From Win32_Product")
i = 0
For Each objProduct in colProducts
ReDim Preserve arrStrProducts(i)
arrStrProducts(i) = objProduct.Name
i = i + 1
Next
WScript.Echo Join(arrStrProducts, vbNewLine)
Теперь, если это сработает, попробуйте то же самое с wbemtest
.
wbemtest
программа.Connect...
root\default
к root\cimv2
, затем щелкните Connect
.Query...
Select * from Win32_Product
, затем щелкните Apply
.Это должен вернуть список продуктов. Если это так, то WMI, вероятно, в порядке, и что-то не так с WMIC. Если сценарий сработал, но этого не произошло, попробуйте выполнить в командной строке следующее:
regsvr32 wbemdisp.dll
затем запустите wbemtest
запрос снова.
Если ни сценарий, ни wbemtest
работает, то, вероятно, WMI перегружен, и вам придется его ремонтировать.
Вы проверили, что поставщик WMI включен? Он не установлен по умолчанию в некоторых версиях Windows.
Установка и удаление программ -> Установка и удаление компонентов Windows -> Средства управления и мониторинга -> Поставщик установщика Windows WMI.