跳转到内容

.NET 开发基金会/配置

来自 Wikibooks,开放世界中的开放书籍


配置、诊断、管理和安装


配置、诊断、管理和安装

[编辑 | 编辑源代码]

考试目标: 将配置、诊断、管理和安装功能嵌入 .NET Framework 应用程序

配置管理

[编辑 | 编辑源代码]

配置管理在此处以受限的意义使用。它指的是将应用程序适配到特定的执行环境或用户。这通常通过使用配置文 件来完成,这些文件指定应用程序的运行时参数。这种配置信息的典型示例是用于定位和连接到应用程序数据库的连接字符串。考试目标都与应用程序与其配置文件的实际交互有关。

配置文件本身的管理或设计是一个广阔的主题,考试目标没有涉及,因此我们不会在本学习指南中介绍它。

.NET 框架安装程序

[编辑 | 编辑源代码]

事件日志

[编辑 | 编辑源代码]

MSDN 的定义是“Windows 事件日志允许您的应用程序和组件记录有关重要事件的信息。您可以使用这些记录来审计对系统 的访问,解决问题以及重新创建使用模式。”

有关一般性讨论,请参见 MSDN

有关 EventLog 类的详细信息以及有关其使用的一些注意事项,请参见 MSDN

性能监视

[编辑 | 编辑源代码]

调试和跟踪

[编辑 | 编辑源代码]

管理信息和事件

[编辑 | 编辑源代码]

Windows 管理规范 - MSDN



Clipboard

待办事项
描述 WMI 在 .NET 中的集成


类、接口和工具

[编辑 | 编辑源代码]

嵌入配置管理

[编辑 | 编辑源代码]

考试目标: 将配置管理功能嵌入 .NET Framework 应用程序。

(参考 System.Configuration 命名空间)

Configuration 类和 ConfigurationManager 类

Configuration 类 - MSDN
ConfigurationManager 类 - MSDN

ConfigurationSettings 类、ConfigurationElement 类、ConfigurationElementCollection 类和 ConfigurationElementProperty 类

ConfigurationSettings 类 - MSDN
ConfigurationElement 类 - MSDN
ConfigurationElementCollection 类 - MSDN
ConfigurationElementProperty 类 - MSDN

实现 IConfigurationSectionHandler 接口 - MSDN

ConfigurationSection 类、ConfigurationSectionCollection 类、ConfigurationSectionGroup 类和 ConfigurationSectionGroupCollection 类

ConfigurationSection 类 - MSDN
ConfigurationSectionCollection 类 - MSDN
ConfigurationSectionGroup 类 - MSDN
ConfigurationSectionGroupCollection - MSDN

实现 ISettingsProviderService 接口 - MSDN

实现 IApplicationSettingsProvider 接口 - MSDN

ConfigurationValidationBase 类 - MSDN

在 MSDN 上没有直接的结果 - 待核实

实现 IConfigurationSystem 接口 - MSDN

创建自定义安装程序并配置应用程序

[编辑 | 编辑源代码]

考试目标: 使用 System.Configuration.Install 命名空间创建 .NET Framework 组件的自定义 Microsoft Windows 安装程序,并使用配置文件、环境变量和 .NET Framework 配置工具 (Mscorcfg.msc) 配置 .NET Framework 应用程序。

有关本节中讨论的过程的“食谱”,请参见 MSDN 以及相应的“操作方法”部分。

Installer 类 - MSDN

配置 .NET Framework 应用程序应使用哪个运行时版本 - MSDN

配置运行时应在何处搜索程序集 - MSDN

配置程序集的位置以及要使用的程序集版本 - MSDNMSDN

指示运行时在搜索程序集时使用 DEVPATH 环境变量 - MSDN

AssemblyInstaller 类 - MSDN

ComponentInstaller 类 - MSDN

使用 .NET Framework 配置工具 (Mscorcfg.msc) 配置 .NET Framework 应用程序 - MSDN

ManagedInstaller 类 - MSDN

InstallContext 类 - MSDN

InstallerCollection 类 - MSDN

实现 IManagedInstaller 接口 - MSDN

InstallEventHandler 委托 - MSDN

配置并发垃圾回收 - MSDN

使用配置文件注册远程对象 - MSDN

管理事件日志

[edit | edit source]

考试目标: 使用 System.Diagnostics 命名空间管理事件日志

EventLog 类 - MSDN

EventSourceCreationData 类 - MSDN

写入事件日志
[edit | edit source]

MSDN

从事件日志读取
[edit | edit source]

MSDN

创建新的事件日志
[edit | edit source]

通过创建第一个写入该日志的事件源来创建 EventLog。

最简单的两种方法是

  • 使用 EventLog.CreateEventSource 方法
  • 创建 EventLog 实例,指定源,然后写入日志。实际创建发生在第一次写入执行时。

请注意,System.Diagnostics 命名空间中没有“EventSource”类,即使在注册表中创建了表示该源的对象。

C# EventLog 创建示例

   using System;
   using System.Collections.Generic;
   using System.Text;
   using System.Diagnostics;
   namespace EventLogLab1
   {
       class Program
       {
           static void Main(string[] args)
           {
               try
               {
                   EventLog log1 = new EventLog("EvtLab2Log");
                   log1.Source = "EvtLab2Source";
                   // Actual creation happens next
                   log1.WriteEntry("Example message", EventLogEntryType.Information,
                       123, 1);
               }
               catch (Exception e)
               {
                   Console.WriteLine(e.Message);
               }
               Console.WriteLine("Press ENTER to finish");
               Console.ReadLine();
           }
       }
   }

推荐的方法,在培训工具包中似乎没有介绍(因此可能不在考试中),是在应用程序安装期间使用 EventLogInstaller 类。有关参考,请参阅 MSDN

管理进程和监控性能

[edit | edit source]

考试目标: 使用 .NET Framework 2.0 的诊断功能管理系统进程并监控 .NET Framework 应用程序的性能。

(参考 System.Diagnostics 命名空间)

获取所有正在运行的进程的列表。

Process 类 - MSDN
有关 GetCurrentProcess()、GetProcessesByName()、GetProcesses() 和 GetProcessById() 的示例代码,请参阅 MSDN

检索有关当前进程的信息 - MSDN

获取进程加载的所有模块的列表

Process.Modules 属性返回 ProcessModule 对象的强类型集合,这些对象表示 Process 当前加载的模块。
有关 Process.Modules 属性,请参阅 MSDN
有关 ProcessModule 类,请参阅 MSDN

PerformanceCounter 类、PerformanceCounterCategory 类和 CounterCreationData 类

PerformanceCounter 类 - MSDN
PerformanceCounterCategory - MSDN
CounterCreationData 类 - MSDN

使用和不使用命令行参数启动进程

启动进程概述
进程使用 Process.Start() 的一个重载方法启动。当将敏感数据(如密码)传递给 Process.Start() 时,请使用接受 SecureString 作为参数类型的两个重载 Start() 方法之一。
外部链接

StackTrace 类 - MSDN

StackFrame 类 - MSDN

调试和跟踪

[edit | edit source]

考试目标: 使用 System.Diagnostics 命名空间调试和跟踪 .NET Framework 应用程序。

Debug 类和 Debugger 类

Debug 类 - MSDN
Debug 类的四个静态写入方法 - WriteWriteLineWriteIfWriteLineIf - 允许您写入调试消息以检查程序的流程并捕获错误。在程序的发行版本中,对这些方法的调用会被忽略(有关详细信息,请参阅下面的“ConditionalAttribute 特性”)。
在 Visual Studio 中,Debug 写入方法的默认目标是输出窗口。您可以使用 Debug 的 Listeners 属性访问关联的 TraceListenerCollection。以下代码显示了如何使用集合的 Remove 和 Add 方法来控制调试消息发送到哪里。如果您添加多个相同类型的侦听器,关联的目标会多次接收文本。
C# 代码示例

Debug 类示例

   using System;
   using System.Diagnostics;
   using System.IO;
   using System.Reflection;
   class Program
   {
       static void Main(string[] args)
       {
           Debug.WriteLine("This is (by default) printed in the Output window.");
           //remove default listener
           Debug.Listeners.RemoveAt(0);
           //add a listener that can write to the Console window
           Debug.Listeners.Add(new ConsoleTraceListener());
           Debug.WriteLine("This is printed in the console window.");
           //add a default listener again
           Debug.Listeners.Add(new DefaultTraceListener());
           Debug.WriteLine("This is printed in both the Output and the Console window.");
           //remove all listeners
           Debug.Listeners.Clear();
           //add a listener that writes to a file
           Debug.Listeners.Add(new TextWriterTraceListener(File.Create("C:\\test.txt")));
           Debug.WriteLine("This is only printed to the newly created file.");
           //here we need to flush the output buffer
           Debug.Flush();
           //keep console window open in debug mode
           Console.ReadLine();
       }
   }
Debugger 类 - MSDN

Trace 类 - MSDN

CorrelationManager 类 - MSDN

TraceListener 类 - MSDN

TraceSource 类 - MSDN

TraceSwitch 类 - MSDN

XmlWriterTraceListener 类 - MSDN

DelimitedListTraceListener 类 - MSDN

EventlogTraceListener 类 - MSDN

调试器特性 - MSDN

DebuggerBrowsableAttribute 类 - MSDN
DebuggerDisplayAttribute 类 - MSDN
DebuggerHiddenAttribute 类 - MSDN
DebuggerNonUserCodeAttribute 类 - MSDN
DebuggerStepperBoundaryAttribute 类 - MSDN
DebuggerStepThroughAttribute 类 - MSDN
DebuggerTypeProxyAttribute 类 - MSDN
DebuggerVisualizerAttribute 类 - MSDN

嵌入管理信息

[编辑 | 编辑源代码]

考试目标:将管理信息和事件嵌入到 .NET Framework 应用程序中。

(参考 System.Management 命名空间 - MSDN)

使用 ManagementObjectSearcher 类及其派生类检索管理对象集合

System.Management 命名空间中的类允许您使用 Windows 管理规范 (WMI) 来管理计算机系统。该命名空间中最值得注意的类是 ManagementObjectSearcher,您可以使用它根据 WMI 查询检索管理对象。
可以通过这种方式检索的信息范围从计算机机箱类型(笔记本电脑、台式机...)到处理器和硬盘详细信息,以及有关正在运行的服务和进程的信息。有关所有 WMI 类及其属性的概述,请参阅 MSDN 上的 WMI 参考
在下面的示例中,定义了一个粗略且不干净的方法,该方法打印给定 WMI 类中所有管理信息对象的属性。然后使用它打印有关当前计算机系统的信息。
C# 示例代码

WMI 基本示例

   class Program
   {
       static void Main(string[] args)
       {
           //Print all management info in the WMI class Win32_ComputerSystem
           PrintManagementInfo("Win32_ComputerSystem");
           //wait for user input to keep console window up in debug mode
           Console.ReadLine();
       }
       static void PrintManagementInfo(string WMIClassName)
       {
           ManagementObjectSearcher mos;
           //Get all managementobjects of the specified class
           mos = new ManagementObjectSearcher("SELECT * FROM " + WMIClassName);
           foreach (ManagementObject MOCollection in mos.Get())
           {
               foreach (PropertyData p in MOCollection.Properties)
               {
                   //Some properties are arrays,
                   //in which case the code below only prints
                   //the type of the array.
                   //Add a check with IsArray() and a loop
                   //to display the individual array values.
                   Console.WriteLine("{0}: {1}", p.Name, p.Value);
               }
           }
       }
   }
ManagementObjectSearcher 类 - MSDN
枚举计算机上的所有磁盘驱动器、网络适配器和进程
以下代码使用 ManagementObjectSearcher 构造函数 的一个重载来列出系统上的所有物理和逻辑磁盘驱动器、网络适配器和正在运行的进程。
C# 示例代码

ManagementObjectSearcher 示例

   class Program
   {
       static void Main(string[] args)
       {
           //
           Console.WriteLine("Physical disks: ");
           PrintManagementInfoProperty("Win32_DiskDrive", "Name");
           Console.WriteLine("*****************************");
           //
           Console.WriteLine("Logical disks: ");
           PrintManagementInfoProperty("Win32_LogicalDisk", "Name");
           Console.WriteLine("*****************************");
           //
           Console.WriteLine("Network adapters: ");
           PrintManagementInfoProperty("Win32_NetworkAdapter", "Name");
           Console.WriteLine("*****************************");
           //  
           Console.WriteLine("Processes: ");
           PrintManagementInfoProperty("Win32_Process", "Name");
           Console.WriteLine("*****************************");
           //  
           //wait for user input to keep console window up in debug mode
           Console.ReadLine();
       }
       static void PrintManagementInfoProperty(string WMIClassName, string WMIPropertyName)
       {
           ManagementObjectSearcher mos;
           //Get the specified property for all objects of the specified class
           mos = new ManagementObjectSearcher("SELECT " + WMIPropertyName + " FROM " + WMIClassName);
           foreach (ManagementObject mo in mos.Get())
           {
               PropertyData p = mo.Properties[WMIPropertyName]; 
               Console.WriteLine("{0}", p.Value);
           }
       }
   }
检索有关所有网络连接的信息
将提供示例
检索有关所有暂停的服务的信息
以下代码使用 ManagementObjectSearcher 对象检索所有正在运行的服务,然后显示其名称。
C# 示例代码

枚举服务示例

   class Program
   {
       static void Main(string[] args)
       {
           Console.WriteLine("Running services: ");
           //form the query, providing a WMI class name and a condition
           SelectQuery query = new SelectQuery("Win32_Service", "State='Running'");
           //find matching management objects
           ManagementObjectSearcher mos = new ManagementObjectSearcher(query);
           //
           foreach (ManagementObject mo in mos.Get())
           {
               Console.WriteLine(mo.Properties["Name"].Value);
           }
           //                        
           //wait for user input to keep console window up in debug mode
           Console.ReadLine();
       }
   }

ManagementQuery 类 - MSDN

EventQuery 类 - MSDN

ObjectQuery 类 - MSDN

使用 ManagementEventWatcher 类订阅管理事件 - MSDN


上一个 / 下一个

华夏公益教科书