描述
IWbemServices.DeleteInstance方法删除当前命名空间中现有类的实例。
C++ 语法
| HRESULT DeleteInstance( [in] const BSTR strObjectPath, [in] LONG lFlags, [in] IWbemContext *pCtx, [out] IWbemCallResult **ppCallResult ); | 
PowerBASIC 语法
| METHOD DeleteInstance ( _ BYVAL strObjectPath AS DWORD, _ BYVAL lFlags AS LONG, _ BYVAL pCtx AS IWbemContext, _ BYREF ppCallResult AS IWbemCallResult _ ) AS LONG | 
参数
strObjectPath
有效BSTR包含要删除的实例的对象路径。
lFlags
以下值之一是有效的。
| 旗 | 含义 | 
| WBEM_FLAG_RETURN_IMMEDIATELY | 这个标志使它成为一个半异步调用。 | 
pCtx
通常为NULL。否则,这是指向正在删除实例的提供者可能使用的IWbemContext对象的指针。必须在相关提供者的文档中指定上下文对象中的值。
ppCallResult
如果为NULL,则不使用此参数。如果指定ppCallResult,则必须将其设置为指定为NULL。如果lFlags参数包含WBEM_FLAG_RETURN_IMMEDIATELY,此调用将立即返回WBEM_S_NO_ERROR。ppCallResult参数接收一个指向新的IWbemCallResult对象的指针,然后可以使用GetCallStatus方法轮询获取结果。
返回值
此方法返回一个HRESULT,表示方法调用的状态。下表列出了HRESULT中包含的值。
失败时,您可以从COM函数GetErrorInfo获取任何可用的信息。
如果网络问题导致您失去与Windows Management的远程连接,也可能会返回COM特定的错误代码。
| 退货代码 | 描述 | 
| WBEM_E_ACCESS_DENIED | 当前上下文没有足够的删除对象的权限。 | 
| WBEM_E_FAILED | 这表示其他未指定的错误。 | 
| WBEM_E_INVALID_CLASS | 指定的类不存在。 | 
| WBEM_E_INVALID_PARAMETER | 其中一个参数无效,就像尝试删除类对象一样。 | 
| WBEM_E_NOT_FOUND | 对象不存在。 | 
| WBEM_E_OUT_OF_MEMORY | 没有足够的内存来完成操作。 | 
| WBEM_E_SHUTTING_DOWN | Windows管理服务可能已停止并重新启动。需要新的电话ConnectServer. | 
| WBEM_E_TRANSPORT_FAILURE | 这表示当前进程和Windows Management之间的远程过程调用(RPC)链接失败。 | 
| WBEM_E_INVALID_OBJECT_PATH | 如果指定的对象路径无效或是类对象路径。 | 
| WBEM_E_INVALID_OPERATION | 如果指定的实例不能被删除。 | 
| WBEM_S_NO_ERROR | 通话成功。 | 
备注
调用IWbemServices.DeleteInstance方法来删除当前命名空间中的现有实例。其他命名空间中的实例无法删除。调用DeleteInstance以删除属于层次结构中的类的实例时,Windows Management将为层次结构中负责非抽象类的所有提供者调用DeleteInstanceAsync方法。也就是说,如果strObjectPath参数标识ClassB的一个实例,ClassB派生自ClassA,非抽象类,并且是ClassC和ClassD的父类,也是非抽象类,则调用所有四个类的提供程序。
Windows Management将调用每个提供程序,并将对象路径修改为指向其类。例如,如果原始调用的strObjectPath设置为“ClassB.k = 1”,则对ClassA提供程序的调用将将strObjectPath设置为“ClassA.k = 1”。
DeleteInstance呼叫的成功仅取决于对最高非抽象类的提供者的DeleteInstanceAsync调用的成功。非抽象类有一个抽象类作为其父类。如果任何一个类的提供者成功,则操作成功;如果所有这些类都失败,则操作失败。
例如,假设ClassX是以下层次结构的基类:
| 1. | ClassA来自ClassX。 | 
| 2. | ClassB来自ClassA。 | 
| 3. | ClassC和ClassD派生自ClassB。 | 
如果ClassX是层次结构中唯一的抽象类,并且DeleteInstance中的strObjectPath参数指向ClassB的实例,则只有ClassA的提供者需要在其DeleteInstanceAsync调用中成功。
如果ClassX,ClassA和ClassB都是抽象的,并且DeleteInstance中的strObjectPath参数再次指向ClassB的实例,则ClassC的提供者或ClassD的提供者必须成功。
要求
| 客户 | 需要Windows Vista,Windows XP,Windows 2000 Professional,Windows NT Workstation 4.0 SP4及更高版本,Windows Me,Windows 98或Windows 95。 | 
| 服务器 | 需要Windows Server 2008,Windows Server 2003,Windows 2000 Server或Windows NT Server 4.0 SP4及更高版本。 | 
| 头 | 在Wbemcli.inc中声明。 | 
| DLL | 需要Fastprox.dll。 需要Esscli.dll。 需要Framedyn.dll。 需要Ntevt.dll。 需要Stdprov.dll。 需要Viewprov.dll。 需要Wbemcomn.dll。 需要Wbemcore.dll。 需要Wbemess.dll。 需要Wbemsvc.dll。 需要Wmipicmp.dll。 需要Wmidcprv.dll。 需要Wmipjobj.dll。 需要Wmiprvsd.dll。 | 


