WMI代码生成器的构建与使用

在Windows管理工具中,WMI(Windows Management Instrumentation)代码生成器是一个强大的工具,它可以帮助开发者快速生成用于访问系统信息的代码。然而,当涉及到需要从WMI Code Creator中选择多个属性并将其移植到Windows Forms应用程序中时,这个过程可能会变得相当耗时。为了提高效率,决定构建一个自定义的代码生成器,以加快构建过程。

已知问题

尽管自定义代码生成器项目仍在进行中,但已经发现了一些已知问题:

  • 在启用了用户账户控制(UAC)的Windows Vista系统上启动程序时,如果直接点击EXE文件或在IDE中点击运行按钮,主窗体加载大约需要60秒,而如果右键选择“以管理员身份运行”,则只需要大约4秒。
  • 如果UAC启用,可能需要以管理员身份运行代码生成器,否则可能会出错。目前还没有添加自动提升权限的代码。
  • 并非所有类都返回信息。当前版本仅支持文本框输出,仍在努力实现数据网格视图和列表框的输出。

程序构建

在构建程序时,首先参考了WMI代码生成器,希望保持与其相似的体验。最初的版本使用了一个复选列表框,但需要为每个想要选择的属性点击两次,后来将其更改为常规列表框,只需单击一次即可。

然后,使用了富文本框,但无法立即右键复制,所以将其更改为常规文本框(在测试时需要使用CTL + C进行复制)。从以前的项目中借用了填充命名空间和类的代码。代码格式化的问题是通过查看常规程序的代码,然后查看如何从代码生成器输出代码来解决的(经过多次试验和错误)。

在加载属性到列表框时遇到的另一个问题是,第一版会弹出“未找到”错误,花了一点时间才弄清楚它没有找到类,而不是通常弹出该错误的属性名称。所以回到了MSDN网站上的System.Management,并从那里找到了解决方案。(有关更好的理解,请参见下载中的项目代码)。

使用程序

要使用此程序,请右键单击并以管理员身份运行(以避免一些问题)。启动画面关闭后,主窗体将打开,并填充命名空间列表。选择一个命名空间,然后类列表将填充。上面的数字告诉找到了多少个类或命名空间(这部分仍需要改进)。

选择一个类后,列表框将用属性填充。通过单击它们来选择想要的属性(除非按钮是反向的),如果属性名称被突出显示,则表示已选中。可以再次单击以取消选择。(列表框属性页面中的选择方法非常简单)。

然后只需单击“创建代码”按钮,输出文本框将被填充。

接下来:创建一个项目,向新窗体添加一个按钮控件和一个文本框。为按钮命名并设置文本。然后在文本框上,将其设置为多行并调整大小以适应窗体。接下来设置文本框属性。

对来说,设置了锚点为所有4个(在设置文本框大小时),以10号字体大小设置字体大小,以适应更高分辨率的屏幕。将滚动条设置为两者(当某些内容不适合时可以解决问题),将自动换行设置为false(输出有时会在下一行混淆)。

如果想为程序使用onload事件,则双击窗体以创建它。更喜欢将其放在代码的顶部。然后单击按钮控件以获取该处理程序。

接下来:在“Public Class Form1”上方添加一些空间以添加Import语句。然后,从代码生成器复制Import语句到刚刚创建的区域。然后,添加Import语句的引用。(现在这样做将消除在下一步中出现的波浪线)。

接下来:从代码生成器复制代码到按钮点击处理程序。从“Dim strbuilder As New StringBuilder”开始,到“VB.NETMessageBox.Show("An error occurred while querying forWMIdata:" & err.Message) End Try”结束。

如果程序(类)使用DTMF日期时间(输出看起来像这样,没有转换,20120426215915.359000-300),那么复制转换为正常日期/时间的函数。包括了一个程序,展示了如何使用该函数。并非所有类都使用该日期格式,可能不需要添加该函数。(TS应用程序在添加它时出错,知道输出应该是什么样子很有帮助)。

只要没有错误,就可以构建并运行新程序。根据需要进行调整。

测试程序

  • MSDN ManagementBaseObject.SystemProperties
  • ManagementDateTimeConverter.ToDateTime
  • ManagementObject.Path Property
  • ManagementPath Class
  • Win32_TSAccount class
  • Using double quotes in strings
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485