1 读取操作系统和CLR的版本
<code class="language-C# hljs avrasm has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"> OperatingSystem os = System<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Environment</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.OSVersion</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Platform: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, os<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Platform</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Service Pack: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, os<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.ServicePack</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Version: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, os<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Version</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“VersionString: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, os<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.VersionString</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">CLR</span> Version: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, System<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Environment</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Version</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>
在我的Windows 7系统中,输出以下信息:
<code class="language-C# hljs mathematica has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"> Platform: Win32NT Service Pack: <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Version</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">6.1</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.7600</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.0</span> VersionString: Microsoft Windows NT <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">6.1</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.7600</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.0</span> CLR <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Version</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4.0</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.21006</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.1</span> </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>
2 读取CPU数量,内存容量
可以通过Windows Management Instrumentation (WMI)提供的接口读取所需要的信息。
<code class="hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> UInt32 <span class="hljs-title" style="box-sizing: border-box;">CountPhysicalProcessors</span>() { ManagementObjectSearcher objects = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> ManagementObjectSearcher( “SELECT * FROM Win32_ComputerSystem”); ManagementObjectCollection coll = objects.Get(); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">foreach</span>(ManagementObject obj <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> coll) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> (UInt32)obj[“NumberOfProcessors”]; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> UInt64 <span class="hljs-title" style="box-sizing: border-box;">CountPhysicalMemory</span>() { ManagementObjectSearcher objects =<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> ManagementObjectSearcher( “SELECT * FROM Win32_PhysicalMemory”); ManagementObjectCollection coll = objects.Get(); UInt64 total = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">foreach</span> (ManagementObject obj <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> coll) { total += (UInt64)obj[“Capacity”]; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> total; } </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li></ul>
请添加对程序集System.Management的引用,确保代码可以正确编译。
<code class="language-C# hljs avrasm has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"> Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Machine: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, Environment<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.MachineName</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># of processors (logical): {0}”, Environment.ProcessorCount); </span> Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># of processors (physical): {0}” CountPhysicalProcessors()); </span> Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“RAM installed: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>:N0} bytes”, CountPhysicalMemory())<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Is OS <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">64</span>-bit? {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, Environment<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Is</span>64BitOperatingSystem)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Is process <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">64</span>-bit? {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, Environment<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Is</span>64BitProcess)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Little-endian: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, BitConverter<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.IsLittleEndian</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> foreach (Screen screen <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> System<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Windows</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Forms</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Screen</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.AllScreens</span>) { Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Screen {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, screen<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.DeviceName</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“\tPrimary {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, screen<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Primary</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“\tBounds: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, screen<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Bounds</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“\tWorking Area: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”,screen<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WorkingArea</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“\tBitsPerPixel: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”,screen<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.BitsPerPixel</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> } </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li></ul>
3 读取注册表键值对
<code class="language-C# hljs avrasm has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"> using (RegistryKey keyRun = Registry<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.LocalMachine</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.OpenSubKey</span>(@”Software\Microsoft\Windows\CurrentVersion\Run”)) { foreach (string valueName <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> keyRun<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.GetValueNames</span>()) { Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Name: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}\tValue: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>}”, valueName, keyRun<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.GetValue</span>(valueName))<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> } } </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li></ul>
请添加命名空间Microsoft.Win32,以确保上面的代码可以编译。
4 启动,停止Windows服务
这项API提供的实用功能常常用来管理应用程序中的服务,而不必到控制面板的管理服务中进行操作。
<code class="language-C# hljs avrasm has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"> ServiceController controller = new ServiceController(“e-M-POWER”)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> controller<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Start</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> if (controller<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.CanPauseAndContinue</span>) { controller<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Pause</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> controller<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Continue</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> } controller<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Stop</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>
.net提供的API中,可以实现一句话安装与卸载服务
<code class="language-C# hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (args[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>] == <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/i"</span>) { ManagedInstallerClass.InstallHelper(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">string</span>[] { Assembly.GetExecutingAssembly().Location }); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (args[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>] == <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/u"</span>) { ManagedInstallerClass.InstallHelper(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">string</span>[] { <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/u"</span>, Assembly.GetExecutingAssembly().Location }); } </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>
如代码所示,给应用程序传入i或u参数,以表示是卸载或是安装程序。
5 验证程序是否有strong name (P/Invoke)
比如在程序中,为了验证程序集是否有签名,可调用如下方法:
<code class="language-C# hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"> [DllImport(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"mscoree.dll"</span>, CharSet=CharSet.Unicode)] <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extern</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> StrongNameSignatureVerificationEx(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">string</span> wszFilePath, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> fForceVerification, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">ref</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> pfWasVerified); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> notForced = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> verified = StrongNameSignatureVerificationEx(assembly, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">ref</span> notForced); Console.WriteLine(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Verified: {0}\nForced: {1}"</span>, verified, !notForced); </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>
这个功能常用在软件保护方法,可用来验证签名的组件。即使你的签名被人去掉,或是所有程序集的签名都被去除,只要程序中有这一项调用代码,则可以停止程序运行。
6 响应系统配置项的变更
比如我们锁定系统后,如果QQ没有退出,则它会显示了忙碌状态。
请添加命名空间Microsoft.Win32,然后对注册下面的事件。
. DisplaySettingsChanged (包含Changing) 显示设置
. InstalledFontsChanged 字体变化
. PaletteChanged
. PowerModeChanged 电源状态
. SessionEnded (用户正在登出或是会话结束)
. SessionSwitch (变更当前用户)
. TimeChanged 时间改变
. UserPreferenceChanged (用户偏号 包含Changing)
我们的ERP系统,会监测系统时间是否改变,如果将时间调整后ERP许可文件之外的范围,会导致ERP软件不可用。
7 运用Windows7的新特性
Windows7系统引入一些新特性,比如打开文件对话框,状态栏可显示当前任务的进度。
<code class="language-C# hljs avrasm has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">Microsoft<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WindowsAPICodePack</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Dialogs</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.CommonOpenFileDialog</span> ofd =new Microsoft<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WindowsAPICodePack</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Dialogs</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.CommonOpenFileDialog</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span> ofd<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.AddToMostRecentlyUsedList</span> = true<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> ofd<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.IsFolderPicker</span> = true<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> ofd<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.AllowNonFileSystemItems</span> = true<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> ofd<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.ShowDialog</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>
用这样的方法打开对话框,与BCL自带类库中的OpenFileDialog功能更多一些。不过只限于Windows 7系统中,所以要调用这段代码,还要检查操作系统的版本要大于6,并且添加对程序集Windows API Code Pack for Microsoft®.NET Framework的引用,请到这个地址下载http://code.msdn.microsoft.com/WindowsAPICodePack
8 检查程序对内存的消耗
用下面的方法,可以检查.NET给程序分配的内存数量:
<code class="language-C# hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">long</span> available = GC.GetTotalMemory(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>); Console.WriteLine(“Before allocations: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>:N0}”, available); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> allocSize = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">40000000</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">byte</span>[] bigArray = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">byte</span>[allocSize]; available = GC.GetTotalMemory(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>); Console.WriteLine(“After allocations: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>:N0}”, available); </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>
在我的系统中,它运行的结果如下所示:
<code class="language-C# hljs mathematica has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Before</span> allocations: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">651</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">064</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">After</span> allocations: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">40</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">690</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">080</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>
使用下面的方法,可以检查当前应用程序占用的内存:
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"> Process proc = Process<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.GetCurrentProcess</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Process Info: “+Environment<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.NewLine</span>+ “Private Memory Size: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>:N0}”+Environment<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.NewLine</span> + “Virtual Memory Size: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>:N0}” + Environment<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.NewLine</span> + “Working <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Set</span> Size: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>:N0}” + Environment<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.NewLine</span> + “Paged Memory Size: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>:N0}” + Environment<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.NewLine</span> + “Paged System Memory Size: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>:N0}” + Environment<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.NewLine</span> + “Non-paged System Memory Size: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>:N0}” + Environment<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.NewLine</span>, proc<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.PrivateMemorySize</span>64, proc<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.VirtualMemorySize</span>64, proc<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WorkingSet</span>64, proc<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.PagedMemorySize</span>64, proc<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.PagedSystemMemorySize</span>64, proc<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.NonpagedSystemMemorySize</span>64 )<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul>
9 使用记秒表检查程序运行时间
如果你担忧某些代码非常耗费时间,可以用StopWatch来检查这段代码消耗的时间,如下面的代码所示:
<code class="language-C# hljs avrasm has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"> System<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Diagnostics</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Stopwatch</span> timer = new System<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Diagnostics</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Stopwatch</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> timer<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Start</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> Decimal total = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> int limit = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1000000</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> for (int i = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; i < limit; ++i) </span> { total = total + (Decimal)Math<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Sqrt</span>(i)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> } timer<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Stop</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Sum of sqrts: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”,total)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Elapsed milliseconds: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, timer<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.ElapsedMilliseconds</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span> Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Elapsed time: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, timer<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Elapsed</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li></ul>
现在已经有专门的工具来检测程序的运行时间,可以细化到每个方法,比如dotNetPerformance软件。
以上面的代码为例子,您需要直接修改源代码,如果是用来测试程序,则有些不方便。请参考下面的例子。
<code class="language-C# hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"> class AutoStopwatch : System.Diagnostics.Stopwatch, IDisposable { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-title" style="box-sizing: border-box;">AutoStopwatch</span>() { Start(); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">Dispose</span>() { Stop(); Console.WriteLine(“Elapsed: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.Elapsed); } } </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li></ul>
借助于using语法,像下面的代码所示,可以检查一段代码的运行时间,并打印在控制台上。
<code class="language-C# hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">using</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> AutoStopwatch()) { Decimal total2 = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> limit2 = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1000000</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; i < limit2; ++i) { total2 = total2 + (Decimal)Math.Sqrt(i); } } </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul>
10 使用光标
当程序正在后台运行保存或是册除操作时,应当将光标状态修改为忙碌。可使用下面的技巧。
<code class="hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"> class AutoWaitCursor : IDisposable { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> Control _target; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> Cursor _prevCursor = Cursors.Default; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-title" style="box-sizing: border-box;">AutoWaitCursor</span>(Control control) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (control == <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">throw</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> ArgumentNullException(“control”); } _target = control; _prevCursor = _target.Cursor; _target.Cursor = Cursors.WaitCursor; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">Dispose</span>() { _target.Cursor = _prevCursor; } } </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li></ul>
用法如下所示,这个写法,是为了预料到程序可能会抛出异常:
<code class="hljs r has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"> using (new AutoWaitCursor(this)) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">...</span> throw new Exception(); } </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>
原文地址:http://blog.csdn.net/honantic/article/details/49337857