与它的基础RCW分开的COM对象不能使用 [英] COM object that has been separated from its underlying RCW can not be used
问题描述
当我从" http://msdn.microsoft.com/zh-cn/library/cc723870(VS.85).aspx ";我得到无法使用与其基础RCW分离的COM对象".例外.
我应该设置任何项目设置来解决此异常吗?我在做什么错?
使用System;
使用System.IO;
使用System.Xml.XPath;
使用System.Management;
//exchangeDataItem xml文档示例实例PROPAGATED =真" TYPE =字符串"</PROPERTY>
//< PROPERTY NAME =数据" TYPE =字符串">
//< VALUE> AUTOBVT-4OVYXAB</VALUE>
//</PROPERTY>
//< PROPERTY NAME =描述" PROPAGATED =真" TYPE =字符串"</PROPERTY>
//< PROPERTY NAME ="ElementName" PROPAGATED =真" TYPE =字符串"</PROPERTY>
//< PROPERTY NAME =名称" TYPE =``字符串''>
//< VALUE> FullyQualifiedDomainName</VALUE>
//</PROPERTY>
//TYPE ="uint16">
//< VALUE> 2</VALUE>
//</PROPERTY>
//</INSTANCE>
命名空间HyperVSamples
{
类GetVirtualMachineDNSName
{{br>
bool running = false;
的foreach(UINT16 operationStatus在(UINT16 [])VM [" OperationalStatus的"])结果,{结果,如果(operationStatus ==启用),点击{结果,运行= TRUE;结果,破;
}}
}
返回运行;
}
静态无效的GetVirtualSystemDNS(字符串vmName)
{{
)ManagementScope scope = new ManagementScope(@``root \ virtualization'',null);
字符串查询= String.Format(``从Msvm_ComputerSystem中选择*其中ElementName ='{0}''',vmName);
ManagementObjectSearcher searcher =新的ManagementObjectSearcher(作用域,新的ObjectQuery(查询));
ManagementObjectCollection vms = searcher.Get();
的foreach(VM的ManagementObject在VMS),点击{结果,如果(VMRunning(VM))结果,{结果ManagementObjectCollection kvpExchangeComponents = vm.GetRelated(QUOT; Msvm_KvpExchangeComponent");结果,如果(kvpExchangeComponents .Count!= 1)
{{
的foreach(的ManagementObject kvpExchangeComponent在kvpExchangeComponents)结果,{结果的foreach(字符串exchangeDataItem在(串[])kvpExchangeComponent [" GuestIntrinsicExchangeItems"])结果,{结果的XPathDocument xpathDoc =新的XPathDocument(新StringReader (exchangeDataItem));
XPathNavigator navigator = xpathDoc.CreateNavigator(); '完全限定的域名']");结果,如果(导航= NULL){搜索结果导航= navigator.SelectSingleNode(QUOT;/INSTANCE/PROPERTY [@ NAME = '数据']/VALUE/子!: :text());
Console.WriteLine(虚拟机{0} DNS名称为:{1}",vmName,navigator.V ALUE);结果,断裂;结果,},点击}结果,},点击}结果,其他结果,{结果Console.WriteLine(QUOT;无法检索到虚拟机的DNS名称. VM {0}未处于运行状态'',vmName);
}
}
}
static void Main(string [] args)
如果if(args!= null&& args.Length!= 1)(
返回;
}
的GetVirtualSystemDNS(args [0]);
此致,
Prasad
感谢您的帖子!不幸的是,当前没有论坛发布您要提问的问题,因此我建议您将问题发布到以下Microsoft.public.platformsdk.complus_mts之一: 希望有帮助!
Hi,
When i am executing below example code from "http://msdn.microsoft.com/en-us/library/cc723870(VS.85).aspx" i get "COM object that has been separated from its underlying RCW can not be used" exception.
Should i set any project settings to solve this exception? What is that i am doing wrong?
using System;
using System.IO;
using System.Xml.XPath;
using System.Management;
// exchangeDataItem xml document sample instance
//
//<INSTANCE CLASSNAME="Msvm_KvpExchangeDataItem">
// <PROPERTY NAME="Caption" PROPAGATED="true" TYPE="string"></PROPERTY>
// <PROPERTY NAME="Data" TYPE="string">
// <VALUE>AUTOBVT-4OVYXAB</VALUE>
// </PROPERTY>
// <PROPERTY NAME="Description" PROPAGATED="true" TYPE="string"></PROPERTY>
// <PROPERTY NAME="ElementName" PROPAGATED="true" TYPE="string"></PROPERTY>
// <PROPERTY NAME="Name" TYPE="string">
// <VALUE>FullyQualifiedDomainName</VALUE>
// </PROPERTY>
// <PROPERTY NAME="Source" TYPE="uint16">
// <VALUE>2</VALUE>
// </PROPERTY>
//</INSTANCE>
namespace HyperVSamples
{
class GetVirtualMachineDNSName
{
static bool VMRunning(ManagementObject vm)
{
const int Enabled = 2;
bool running = false;
foreach (UInt16 operationStatus in (UInt16[])vm["OperationalStatus"])
{
if (operationStatus == Enabled)
{
running = true;
break;
}
}
return running;
}
static void GetVirtualSystemDNS(string vmName)
{
ManagementScope scope = new ManagementScope(@"root\virtualization", null);
string query = String.Format("select * from Msvm_ComputerSystem where ElementName = '{0}'", vmName);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, new ObjectQuery(query));
ManagementObjectCollection vms = searcher.Get();
foreach (ManagementObject vm in vms)
{
if (VMRunning(vm))
{
ManagementObjectCollection kvpExchangeComponents = vm.GetRelated("Msvm_KvpExchangeComponent");
if (kvpExchangeComponents.Count != 1)
{
throw new Exception(String.Format("{0} instance of Msvm_KvpExchangeComponent was found", kvpExchangeComponents.Count));
}
foreach (ManagementObject kvpExchangeComponent in kvpExchangeComponents)
{
foreach (string exchangeDataItem in (string[])kvpExchangeComponent["GuestIntrinsicExchangeItems"])
{
XPathDocument xpathDoc = new XPathDocument(new StringReader(exchangeDataItem));
XPathNavigator navigator = xpathDoc.CreateNavigator();
navigator = navigator.SelectSingleNode("/INSTANCE/PROPERTY[@NAME='Name']/VALUE[child::text() = 'FullyQualifiedDomainName']");
if (navigator != null)
{
navigator = navigator.SelectSingleNode("/INSTANCE/PROPERTY[@NAME='Data']/VALUE/child::text()");
Console.WriteLine("Virtual machine {0} DNS name is: {1}", vmName, navigator.Value);
break;
}
}
}
}
else
{
Console.WriteLine("Unable to retrieve virtual machine DNS name. VM {0} is not in running state", vmName);
}
}
}
static void Main(string[] args)
{
if (args != null && args.Length != 1)
{
Console.WriteLine("Usage: GetVirtualMachineDNSName vmName");
return;
}
GetVirtualSystemDNS(args[0]);
}
}
}
Thanks & Regards,
Prasad
Hello Prasad,
Thank you for your post! Unfortunately there is not a current forum to post the question you are asking so I would recommend that you post your question to one of the microsoft.public.platformsdk.complus_mts located here: http://www.microsoft.com/communities/newsgroups/list/en-us/default.aspx?dg=microsoft.public.platformsdk.complus_mts&mid=c4ac4330-7753-45d9-9721-b4bdd786bd85Hope that helps!
这篇关于与它的基础RCW分开的COM对象不能使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!