我试图在我的服务器上自动安装MSI,但是在安装之前,我需要从服务器卸载以前的版本。
在互联网上搜索时,我发现WMIC是所需的工具,但是在服务器上设置WMI似乎有问题。运行以下命令会产生错误:
命令prompt>wmic
然后在工具内部
/trace:on
产品得名
这将返回一长串成功和一个失败:
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 2003 R2的标准安装上运行这一程序,并具有管理员权限。
谢谢
Stu
发布于 2010-02-26 01:57:53
MSI的自动化安装有很多种方法,WMIC就是其中之一。您是否考虑过一种更简单的方法,比如批处理文件:
rem Uninstall old program:
msiexec /qb /x {05EC21B8-4593-3037-A781-A6B5AFFCB19D}
rem Install new program:
msiexec /qb /i MyNewProgram.msi
(当然,用程序的GUID或Uninstall
密钥名替换上面的GUID )。
或者,您可以使用Windows安装程序的自动化接口Windows安装程序的自动化接口。
或者,您可以通过VBScript或PowerShell使用WMI来完成与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可能是超级水龙头,您将不得不修复它。
发布于 2010-04-15 20:04:30
您是否验证已启用WMI提供程序?默认情况下,在某些版本的Windows上没有安装它。
添加/删除程序->添加/删除->组件、->管理和监视工具-> WMI Windows安装程序提供程序。
https://serverfault.com/questions/116693
复制相似问题