<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[鱼之道]]></title>
  <subtitle type="html"><![CDATA[身体发肤，受之父母，不敢毁伤，孝之始也。立身行道，扬名於后世，以显父母，孝之终也。]]></subtitle>
  <id>http://blog.buddy.cn/</id> 
  <link rel="alternate" type="text/html" href="http://blog.buddy.cn/" /> 
  <link rel="self" type="application/atom+xml" href="http://blog.buddy.cn/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.4.1022">PJBlog2</generator> 
  <updated>2010-08-25T15:41:07+08:00</updated> 

  <entry>
	  <title type="html"><![CDATA[用svcutil.exe为https的wcf写的webservice生成代理类]]></title>
	  <author>
		 <name>Peter</name>
		 <uri>http://blog.buddy.cn/</uri>
		 <email>yujun.china@gmail.com</email>
	  </author>
	  <category term="" scheme="http://blog.buddy.cn/default.asp?cateID=3" label="学习" /> 
	  <updated>2010-08-25T15:41:07+08:00</updated>
	  <published>2010-08-25T15:41:07+08:00</published>
		  <summary type="html"><![CDATA[wcf写的webservice，其默认情况下的WSDL文件都会有一些&lt;import&gt;的语法，貌似如果一旦这个webservice使用https的验证方式的话，svcutil.exe就不能根据wsdl生成代理类了，因为读不到import的那些东东，一般是一些xsd<br/><br/>报错信息：<br/>===================<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://blog.buddy.cn/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>C:\Users\Administrator\Desktop\WSDLs&gt;SvcUtil.exe &#34;TransactionWebService - Copy.wsdl&#34;<br/>Microsoft (R) Service Model Metadata Tool<br/>[Microsoft (R) Windows (R) Communication Foundation, Version 3.0.4506.2152]<br/>Copyright (c) Microsoft Corporation.&nbsp;&nbsp;All rights reserved.<br/><br/>Error: Cannot import wsdl:portType<br/>Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.DataContractSerializerMessageContractImporter<br/>Error: Schema with target namespace &#39;urn:schemas.microsoft.com/CommercePlatform/Services/Transaction<br/>Service/2010/01&#39; could not be found.<br/>XPath to Error Source: //wsdl:definitions[@targetNamespace=&#39;urn:schemas.microsoft.com/CommercePlatform/Services/TransactionService/2010/01&#39;]/wsdl:portType[@name=&#39;TransactionService&#39;]<br/><br/><br/>Error: Cannot import wsdl:binding<br/>Detail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on.<br/>XPath to wsdl:portType: //wsdl:definitions[@targetNamespace=&#39;urn:schemas.microsoft.com/CommercePlatform/Services/TransactionService/2010/01&#39;]/wsdl:portType[@name=&#39;TransactionService&#39;]<br/>XPath to Error Source: //wsdl:definitions[@targetNamespace=&#39;urn:schemas.microsoft.com/CommercePlatfo<br/>rm/Services/TransactionService/2010/01&#39;]/wsdl:binding[@name=&#39;TransactionServiceEndPoint&#39;]<br/><br/><br/>Error: Cannot import wsdl:port<br/>Detail: There was an error importing a wsdl:binding that the wsdl:port is dependent on.<br/>XPath to wsdl:binding: //wsdl:definitions[@targetNamespace=&#39;urn:schemas.microsoft.com/CommercePlatform/Services/TransactionService/2010/01&#39;]/wsdl:binding[@name=&#39;TransactionServiceEndPoint&#39;]<br/>XPath to Error Source: //wsdl:definitions[@targetNamespace=&#39;urn:schemas.microsoft.com/CommercePlatfo<br/>rm/Services/TransactionService/2010/01&#39;]/wsdl:service[@name=&#39;TransactionService&#39;]/wsdl:port[@name=&#39;T<br/>ransactionServiceEndPoint&#39;]<br/><br/><br/>Generating files...<br/>Warning: No code was generated.<br/>If you were trying to generate a client, this could be because the metadata documents did not contain any valid contracts o&#114; services<br/>o&#114; because all contracts/services were discovered to exist in /reference assemblies. Verify that you passed all the metadata documents to the tool.<br/><br/>Warning: If you would like to generate data contracts from schemas make sure to use the /dataContrac<br/>tOnly option.</div></div><br/>===================<br/><br/>所以解决方法如下：<br/>1.把wsdl保存到本地<br/>2.把import的xsd也都保存到本地<br/>3.把保存的wsdl里的import的xsd改成保存到本地的xsd<br/>4.再用svcutil.exe根据本地的wsdl和xsd生成代理类<br/><br/>命令：<br/>svcuti.exe &lt;wsdlfilePath&gt; &lt;xsdfilepath1&gt; &lt;xsdfilepath2&gt; ...]]></summary>
	  <link rel="alternate" type="text/html" href="http://blog.buddy.cn/default.asp?id=257" /> 
	  <id>http://blog.buddy.cn/default.asp?id=257</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Convert 250GB dynamic VHD to 40GB fixed size VHD]]></title>
	  <author>
		 <name>Peter</name>
		 <uri>http://blog.buddy.cn/</uri>
		 <email>yujun.china@gmail.com</email>
	  </author>
	  <category term="" scheme="http://blog.buddy.cn/default.asp?cateID=3" label="学习" /> 
	  <updated>2010-07-23T10:54:21+08:00</updated>
	  <published>2010-07-23T10:54:21+08:00</published>
		  <summary type="html"><![CDATA[<div style="TEXT-ALIGN: center; MARGIN: 0in 0in 10pt" align="center"><b><span style="LINE-HEIGHT: 115%; FONT-SIZE: 18pt"><font face="Calibri">Convert 250GB dynamic VHD to 40GB fixed size VHD</font></span></b></div>
<div style="MARGIN: 24pt 0in 0pt"><b><font size="6"><font size="5"><font color="#365f91"><font face="Cambria">Pre-request</font></font></font></font></b></div>
<div style="MARGIN: 0in 0in 10pt"><font face="Calibri">If you want to convert a 250GB dynamic VHD to 40GB fixed size VHD, you have to make sure the used disk space of that 250GB dynamic VHD is less than 40GB.</font>&nbsp;</div>
<div style="MARGIN: 24pt 0in 0pt"><b><font size="6"><font size="5"><font color="#365f91"><font face="Cambria">Glossary</font></font></font></font></b></div>
<div style="MARGIN: 0in 0in 10pt"><font face="Calibri">Source VHD: The 250GB dynamic VHD file</font></div>
<div style="MARGIN: 0in 0in 10pt"><font face="Calibri">Destination VHD: The 40GB fixed size VHD file</font></div>
<div style="MARGIN: 0in 0in 10pt"><font face="Calibri">Local Machine: Machine that hosts Hyper-V</font></div>
<div style="MARGIN: 0in 0in 10pt"><font face="Calibri">VHD Share: The share path that contains the 250GB dynamic VHD file</font>&nbsp;</div>
<div style="MARGIN: 24pt 0in 0pt"><b><font size="6"><font size="5"><font color="#365f91"><font face="Cambria">Steps</font></font></font></font></b></div>
<div style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in"><span><font face="Calibri">1.</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font face="Calibri">Copy the Source VHD to Local Machine from VHD Share</font></div>
<div style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in"><span><font face="Calibri">2.</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font face="Calibri">Create a VM on Local Machine and attach the Source VHD as its disk</font></div>
<div style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in"><span><font face="Calibri">3.</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font face="Calibri">Start the VM and logon to OS</font></div>
<div style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in"><span><font face="Calibri">4.</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font face="Calibri">Open &ldquo;Server Manager&rdquo;, navigate to &ldquo;Storage -&gt; Disk Management&rdquo;</font></div>
<div style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in"><span style="LINE-HEIGHT: 115%; FONT-SIZE: 18pt"><font face="Calibri"><img alt="" src="http://blog.buddy.cn/attachments/month_1007/t2010723105237.jpg" /></font></span></div>
<div style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in"><span><font face="Calibri">5.</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font face="Calibri">Right click on disk C, select &ldquo;Shrink Volume&hellip;&rdquo;</font></div>
<div style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in"><img alt="" src="http://blog.buddy.cn/attachments/month_1007/k2010723105258.jpg" /></div>
<div style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in"><span><font face="Calibri">6.</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font face="Calibri">Enter the amount of space to shrink, make sure the total size after shrink is about 40GB</font></div>
<div style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in"><img alt="" src="http://blog.buddy.cn/attachments/month_1007/7201072310536.jpg" /></div>
<div style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in"><span><font face="Calibri">7.</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font face="Calibri">Click &ldquo;Shrink&rdquo; botton</font></div>
<div style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in"><span><font face="Calibri"><span style="LINE-HEIGHT: 115%; FONT-SIZE: 18pt"><font face="Calibri"></font></span>8.</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font face="Calibri">After shrink, you should see that</font></div>
<div style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in"><span><font face="Calibri"><span style="LINE-HEIGHT: 115%; FONT-SIZE: 18pt"><font face="Calibri"><img alt="" src="http://blog.buddy.cn/attachments/month_1007/b2010723105333.jpg" /></font></span></font></span></div>
<div style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in"><span><font face="Calibri">9.</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font face="Calibri">Now shut down VM</font></div>
<div style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in"><span><font face="Calibri">10.</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp; </span></span><font face="Calibri">Download &ldquo;VHD Resizer&rdquo; tool at </font><a href="http://vmtoolkit.com/files/folders/converters/entry87.aspx"><font face="Calibri">http://vmtoolkit.com/files/folders/converters/entry87.aspx</font></a><font face="Calibri">, install it</font></div>
<div style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in"><span><font face="Calibri">11.</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp; </span></span><font face="Calibri">Start the VHD Resizer tool, select the Source VHD as its source VHD</font></div>
<div style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in"><img alt="" src="http://blog.buddy.cn/attachments/month_1007/42010723105357.jpg" /></div>
<div style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in"><span><font face="Calibri">12.</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp; </span></span><font face="Calibri">Input a VHD path as its destination VHD, make sure the destination VHD is not exist</font></div>
<div style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in"><img alt="" src="http://blog.buddy.cn/attachments/month_1007/2201072310548.jpg" /></div>
<div style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in"><span><font face="Calibri">13.</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp; </span></span><font face="Calibri">Set type to &ldquo;Fixed&rdquo;, and input the new size, the new size should be bigger than the &ldquo;Min&rdquo; value. You can see &ldquo;Min&rdquo; value at below screenshot.</font></div>
<div style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in"><img alt="" src="http://blog.buddy.cn/attachments/month_1007/l2010723105418.jpg" /></div>
<div style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in"><span><font face="Calibri">14.</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp; </span></span><font face="Calibri">Click &ldquo;resize&rdquo; button and wait. This process need about 1 to 2 hours</font></div>
<div style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 10pt 0.5in"><span><font face="Calibri">15.</font><span style="FONT: 7pt &quot;Times New Roman&quot;">&nbsp;&nbsp; </span></span><font face="Calibri">After resize, you will see the new VHD with 40GB fixed size now.</font></div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://blog.buddy.cn/default.asp?id=253" /> 
	  <id>http://blog.buddy.cn/default.asp?id=253</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Connect web service with SSL connection]]></title>
	  <author>
		 <name>Peter</name>
		 <uri>http://blog.buddy.cn/</uri>
		 <email>yujun.china@gmail.com</email>
	  </author>
	  <category term="" scheme="http://blog.buddy.cn/default.asp?cateID=3" label="学习" /> 
	  <updated>2010-07-05T13:52:50+08:00</updated>
	  <published>2010-07-05T13:52:50+08:00</published>
		  <summary type="html"><![CDATA[1. Import the cert file<br/>2. Import the pfx file <br/>3. <div class="UBBPanel"><div class="UBBTitle"><img src="http://blog.buddy.cn/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>using System;<br/>using System.Collections.Generic;<br/>using System.Linq;<br/>using System.Text;<br/>using System.Net;<br/>using System.Security.Cryptography.X509Certificates;<br/>using System.Net.Security;<br/>using ConsoleApplication1.ScsWebReference;<br/><br/>namespace ConsoleApplication1<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;class Program<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static string ServiceUrl = &#34;<a href="https://172.22.120.154/scs/scsapiwebservice.asmx?wsdl" target="_blank">https://172.22.120.154/scs/scsapiwebservice.asmx?wsdl</a>&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static string CertSerialNumber = &#34;1fcf8092000000002d07&#34;;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static void Main(string[] args)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) =&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (sslPolicyErrors == SslPolicyErrors.RemoteCertificateNameMismatch || sslPolicyErrors == SslPolicyErrors.None)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bdk scs = new bdk();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scs.Url = ServiceUrl;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scs.ClientCertificates.Add(GetCert(CertSerialNumber));<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string testConnectionOut;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scs.TestConnection(&#34;Scs Test&#34;, out testConnectionOut);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private static X509Certificate GetCert(string serialNumber)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;store.Open(OpenFlags.OpenExistingOnly);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach (X509Certificate2 cert in store.Certificates)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (cert.GetSerialNumberString().Equals(serialNumber, StringComparison.OrdinalIgnoreCase))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!cert.HasPrivateKey)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw new ApplicationException(&#34;The cert (&#34; + serialNumber + &#34;) does not have a private key&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.Write(&#34;Got the cert, serial number:&#34; + serialNumber);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return cert;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw new ApplicationException(&#34;Cannot find cert with SN=&#34; + serialNumber);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;finally<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;store.Close();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/></div></div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://blog.buddy.cn/default.asp?id=251" /> 
	  <id>http://blog.buddy.cn/default.asp?id=251</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[第一天到新办公室]]></title>
	  <author>
		 <name>Peter</name>
		 <uri>http://blog.buddy.cn/</uri>
		 <email>yujun.china@gmail.com</email>
	  </author>
	  <category term="" scheme="http://blog.buddy.cn/default.asp?cateID=6" label="工作" /> 
	  <updated>2010-06-30T17:26:31+08:00</updated>
	  <published>2010-06-30T17:26:31+08:00</published>
		  <summary type="html"><![CDATA[今天是第一天在新办公室上班，环境比老办公室好多了，就是人都不认识，呵呵。<br/><br/>今天喝了三瓶饮料，看了几篇文档，提交了好多权限申请，又要开始忙了。。。]]></summary>
	  <link rel="alternate" type="text/html" href="http://blog.buddy.cn/default.asp?id=250" /> 
	  <id>http://blog.buddy.cn/default.asp?id=250</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[WPF揭秘.pdf]]></title>
	  <author>
		 <name>Peter</name>
		 <uri>http://blog.buddy.cn/</uri>
		 <email>yujun.china@gmail.com</email>
	  </author>
	  <category term="" scheme="http://blog.buddy.cn/default.asp?cateID=3" label="学习" /> 
	  <updated>2010-06-28T11:02:20+08:00</updated>
	  <published>2010-06-28T11:02:20+08:00</published>
		  <summary type="html"><![CDATA[<img src="http://blog.buddy.cn/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://blog.buddy.cn/attachments/month_1006/f201062811216.pdf" target="_blank">点击下载此文件</a><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://blog.buddy.cn/default.asp?id=247" /> 
	  <id>http://blog.buddy.cn/default.asp?id=247</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[杭州旅游]]></title>
	  <author>
		 <name>Peter</name>
		 <uri>http://blog.buddy.cn/</uri>
		 <email>yujun.china@gmail.com</email>
	  </author>
	  <category term="" scheme="http://blog.buddy.cn/default.asp?cateID=4" label="相册" /> 
	  <updated>2010-06-27T17:40:16+08:00</updated>
	  <published>2010-06-27T17:40:16+08:00</published>
		  <summary type="html"><![CDATA[前些时候和小薇薇去杭州旅游了，划船了，还去了雷锋塔，哈哈，很好玩，不过累死我了！！！<br/><br/>贴些照片上来<br/><br/>这个看上去太和谐了<br/><img src="http://blog.buddy.cn/attachments/month_1006/32010627173857.jpg" border="0" alt=""/><br/><br/><img src="http://blog.buddy.cn/attachments/month_1006/b2010627174011.jpg" border="0" alt=""/><br/><br/>苏州西湖游船上，本来想玩那种自己划的船，可是人家下午下班了，不给玩，可惜<br/><img src="http://blog.buddy.cn/attachments/month_1006/o2010627174115.jpg" border="0" alt=""/><br/><br/>这个看上去好<br/><img src="http://blog.buddy.cn/attachments/month_1006/i2010627174326.jpg" border="0" alt=""/><br/><br/>这个是李菲，好久没见的，有两三年吧<br/><img src="http://blog.buddy.cn/attachments/month_1006/k201062717447.jpg" border="0" alt=""/><br/><br/>好绿啊<br/><img src="http://blog.buddy.cn/attachments/month_1006/32010627174428.jpg" border="0" alt=""/><br/><br/>这个是雷锋塔上照的，其实就一破塔，还人特别多，也没白蛇，居然里面有电梯，不晓得当年白蛇是不是坐电梯上去的<br/><img src="http://blog.buddy.cn/attachments/month_1006/y201062717461.jpg" border="0" alt=""/><br/><br/>在火车站等回来的车，一人一半脸，啊哈哈<br/><img src="http://blog.buddy.cn/attachments/month_1006/s2010627174639.jpg" border="0" alt=""/><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://blog.buddy.cn/default.asp?id=244" /> 
	  <id>http://blog.buddy.cn/default.asp?id=244</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[小薇这几天快乐得像只小鸟]]></title>
	  <author>
		 <name>Peter</name>
		 <uri>http://blog.buddy.cn/</uri>
		 <email>yujun.china@gmail.com</email>
	  </author>
	  <category term="" scheme="http://blog.buddy.cn/default.asp?cateID=13" label="生活" /> 
	  <updated>2010-02-22T19:51:33+08:00</updated>
	  <published>2010-02-22T19:51:33+08:00</published>
		  <summary type="html"><![CDATA[我们又回来啦，啦啦啦，啦啦啦。。。。。。]]></summary>
	  <link rel="alternate" type="text/html" href="http://blog.buddy.cn/default.asp?id=235" /> 
	  <id>http://blog.buddy.cn/default.asp?id=235</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[年底的税，真TMD的扣得心疼]]></title>
	  <author>
		 <name>Peter</name>
		 <uri>http://blog.buddy.cn/</uri>
		 <email>yujun.china@gmail.com</email>
	  </author>
	  <category term="" scheme="http://blog.buddy.cn/default.asp?cateID=5" label="琐事" /> 
	  <updated>2010-02-11T14:39:44+08:00</updated>
	  <published>2010-02-11T14:39:44+08:00</published>
		  <summary type="html"><![CDATA[================工资单==============<br/>员工编号 Employee ID 00002926<br/>员工姓名 Employee Name 余军<br/>...<br/>(62)个调税额合计 Total Tax 1152.50<br/>...<br/>==============================<br/><br/>P，这是加上年终奖一起扣的税，年终奖还加在工资一起扣税，真是悲剧<br/><br/>真恶心，扣这么多税。。。]]></summary>
	  <link rel="alternate" type="text/html" href="http://blog.buddy.cn/default.asp?id=234" /> 
	  <id>http://blog.buddy.cn/default.asp?id=234</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[关于卸载Operations Manager之后，安装新版本失败的问题]]></title>
	  <author>
		 <name>Peter</name>
		 <uri>http://blog.buddy.cn/</uri>
		 <email>yujun.china@gmail.com</email>
	  </author>
	  <category term="" scheme="http://blog.buddy.cn/default.asp?cateID=3" label="学习" /> 
	  <updated>2010-01-18T10:09:48+08:00</updated>
	  <published>2010-01-18T10:09:48+08:00</published>
		  <summary type="html"><![CDATA[当你卸载一个旧版本的System Center Operations Manager之后，如果想安装它的新版本，可能你会收到如下的报错信息：<br/>---------------------------<br/>&#34;Invalid Management Group name&#34; <br/><br/> <br/><br/>This problem occurs when the Management Group name is:<br/><br/> <br/><br/>-Empty of Null<br/><br/>-Leading o&#114; Trailing spaces<br/><br/> <br/><br/>-Already exists on this computer<br/><br/>-Contains special characters.&nbsp;&nbsp; The Management Group name should not contain following special characters:<br/>^@)~(:!`#%\*+$|,&amp;&amp;=&#39;[&#34;]/&lt;.{;?&gt;}<br/><br/> <br/><br/>To continue setup, go back and change the Management Group name.<br/>---------------------------<br/><br/>这是因为系统在卸载时，没有删除相关的注册表项导致的，解决方法很简单，删掉如下注册表项即可：<br/>HKLM\Software\Microsoft\Microsoft Operations Manager<br/>如果安装目录也没有卸载干净的话，也手动删除一下就好了。]]></summary>
	  <link rel="alternate" type="text/html" href="http://blog.buddy.cn/default.asp?id=231" /> 
	  <id>http://blog.buddy.cn/default.asp?id=231</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[获取指定进程的CPU使用率]]></title>
	  <author>
		 <name>Peter</name>
		 <uri>http://blog.buddy.cn/</uri>
		 <email>yujun.china@gmail.com</email>
	  </author>
	  <category term="" scheme="http://blog.buddy.cn/default.asp?cateID=3" label="学习" /> 
	  <updated>2010-01-13T10:29:22+08:00</updated>
	  <published>2010-01-13T10:29:22+08:00</published>
		  <summary type="html"><![CDATA[这些天，碰到一个项目需求，需要做一个小工具用来检测某些指定进程的CPU使用率的总和。具体的说就是有两个进程“HealthService”和“MonitoringHost”，这两个进程会启动一些其他的进程，而被启动的进程又可能启动其他进程，现在的需求就是从这两个最顶端的进程递归寻找到所有子进程，然后计算他们的CPU使用率的综合。<br/><br/>搞了一天，终于搞定，先总结如下。<br/><br/>仅仅用C#的Process类来做貌似比较复杂，而且C#里面貌似获取不到某个进程的父进程ID，所以我基本是用WMI查询来做的，贴部分代码上来，代码写的比较乱，毕竟不是正式的东东，这只是为了测试而写的一个小工具。<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://blog.buddy.cn/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>//这两个类用来获取所有的目标进程，返回值是一个ID和Name的Pair<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;class MOMProcessHelper<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private List&lt;string&gt; topLevelProcessNames;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private List&lt;string&gt; TopLevelProcessNames<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return this.topLevelProcessNames;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ManagementObjectSearcher searcher;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public MOMProcessHelper()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.topLevelProcessNames = new List&lt;string&gt;();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.topLevelProcessNames.Add(&#34;HealthService&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.topLevelProcessNames.Add(&#34;MonitoringHost&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//this.topLevelProcessNames.Add(&#34;System&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//this.topLevelProcessNames.Add(&#34;taskmgr&#34;);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;searcher = new ManagementObjectSearcher();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;searcher.Scope = new ManagementScope(&#34;root\\CIMV2&#34;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// get all mom processes<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;returns&gt;&lt;/returns&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public List&lt;ProcessIdNamePair&gt; GetMOMProcess()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Process[] processes = Process.GetProcesses();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;ProcessIdNamePair&gt; destProcess = new List&lt;ProcessIdNamePair&gt;();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach (Process process in processes)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (this.TopLevelProcessNames.Contains(process.ProcessName))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProcessIdNamePair pair = new ProcessIdNamePair();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pair.Id = process.Id;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pair.Name = process.ProcessName;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destProcess.Add(pair);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destProcess.AddRange(this.GetChildrenProcess(process.Id));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i = destProcess.Count - 1; i &gt;= 0; i--)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int j = 0; j &lt; i; j++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (destProcess[i].Id == destProcess[j].Id)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destProcess.RemoveAt(i);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return destProcess;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// travelsal to get all children processes<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;param name=&#34;parentProcessId&#34;&gt;&lt;/param&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;returns&gt;&lt;/returns&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private List&lt;ProcessIdNamePair&gt; GetChildrenProcess(int parentProcessId)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObjectQuery q = new ObjectQuery();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q.QueryString = &#34;Sel&#101;ct Name, ProcessId FROM Win32_Process wh&#101;re ParentProcessId = &#34; + parentProcessId.ToString();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.searcher.Query = q;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;ProcessIdNamePair&gt; childrenProcesses = new List&lt;ProcessIdNamePair&gt;();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach (ManagementObject process in this.searcher.Get())<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProcessIdNamePair pair = new ProcessIdNamePair();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pair.Name = process.Properties[&#34;Name&#34;].Value.ToString();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pair.Id = Convert.ToInt32(process.Properties[&#34;ProcessId&#34;].Value);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;childrenProcesses.Add(pair);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//travelsal<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;childrenProcesses.AddRange(this.GetChildrenProcess(pair.Id));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return childrenProcesses;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public class ProcessIdNamePair<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private int id;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private string name;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public int Id<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get { return id; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set { id = value; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public string Name<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get { return name; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set { name = value; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public Process ToProcess()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Process p = Process.GetProcessById(this.Id);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return p;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/></div></div><br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://blog.buddy.cn/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>//这个类用来获取CPU使用率，需要传递一个进程列表进来作为参数<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public class CpuUsageHelper<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public static Dictionary&lt;string,int&gt; GetProcessorCoreCount()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dictionary&lt;string, int&gt; processorCount = new Dictionary&lt;string, int&gt;();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ManagementObjectSearcher searcher = new ManagementObjectSearcher();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;searcher.Scope = new ManagementScope(&#34;root\\CIMV2&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;searcher.Query = new ObjectQuery();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;searcher.Query.QueryString = &#34;Sel&#101;ct Name,NumberOfCores FROM Win32_Processor&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach (ManagementObject obj in searcher.Get())<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string name = obj.Properties[&#34;Name&#34;].Value.ToString();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int numberOfCores = Convert.ToInt32(obj.Properties[&#34;NumberOfCores&#34;].Value);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;processorCount.Add(name, numberOfCores);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return processorCount;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//PercentProcessorTime, IDProcess, CreatingProcessId<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public static int GetPercentProcessorTime(List&lt;ProcessIdNamePair&gt; processes)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int total = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ManagementObjectSearcher searcher = new ManagementObjectSearcher();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;searcher.Scope = new ManagementScope(&#34;root\\CIMV2&#34;);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach (ProcessIdNamePair process in processes)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//get processor cores<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int coreCount = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;searcher.Query = new ObjectQuery();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;searcher.Query.QueryString = &#34;Sel&#101;ct NumberOfCores FROM Win32_Processor&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach (ManagementObject obj in searcher.Get())<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (obj.Properties[&#34;NumberOfCores&#34;].Value != null)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;coreCount += Convert.ToInt32(obj.Properties[&#34;NumberOfCores&#34;].Value);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;searcher.Query.QueryString = &#34;Sel&#101;ct PercentProcessorTime From Win32_PerfFormattedData_PerfProc_Process wh&#101;re IDProcess = &#34; + process.Id.ToString();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach (ManagementObject obj in searcher.Get())<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (obj.Properties[&#34;PercentProcessorTime&#34;].Value != null)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int usage = Convert.ToInt32(obj.Properties[&#34;PercentProcessorTime&#34;].Value);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;usage /= coreCount;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;total += usage;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return total;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public static int GetMomCpuUsage(out List&lt;ProcessIdNamePair&gt; momProcesses)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOMProcessHelper helper = new MOMProcessHelper();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;momProcesses = helper.GetMOMProcess();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return CpuUsageHelper.GetPercentProcessorTime(momProcesses);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/></div></div><br/><br/>简单的写一下，附件就不上传了，我正在办公室，微软内部貌似不让传文件出去，呵呵。]]></summary>
	  <link rel="alternate" type="text/html" href="http://blog.buddy.cn/default.asp?id=230" /> 
	  <id>http://blog.buddy.cn/default.asp?id=230</id> 
  </entry>	
		
</feed>