我试图在我的服务器上自动安装MSI,但是在安装之前,我需要从服务器上卸载以前的版本。
在互联网上search我发现WMIC是需要的工具,但在服务器上安装WMI似乎有问题。 运行以下命令会出现错误:
命令提示符> wmic
然后在工具里面
/跟踪:上
产品获取名称
这返回了一连串的成功和一个失败:
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与pipe理员privelages运行此。
谢谢
斯图
自动化(un)安装MSI有很多方法,WMIC就是其中之一。 你有没有想过一个更简单的方法,就像一个batch file:
rem Uninstall old program: msiexec /qb /x {05EC21B8-4593-3037-A781-A6B5AFFCB19D} rem Install new program: msiexec /qb /i MyNewProgram.msi
(当然,使用程序的GUID或Uninstall键名replace上面的GUID)。
或者,您可以使用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可能是超级的,你将不得不修复它。
您是否validation过WMI提供程序已启用? 它在某些版本的Windows上未默认安装。
添加/删除程序 – >添加/删除Windows组件 – >pipe理和监视工具 – > WMI Windows安装程序提供程序。