c# - 从 Vb.net 到 C# 实现 WMI 相关模块
问题描述
我想将此模块从我找到的其他 Visual Basic 程序添加到我的 C# 程序中。
我试图转换它,但我收到错误:CS1061、CS0428、CS1579 编译时。还添加了参考(MS.VB、Sys.Management)。
视觉基础:
Public Shared Sub KillLastProc()
Dim objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\" & Environment.UserDomainName & "\root\cimv2")
Dim colProcess = objWMIService.ExecQuery("Select * from Win32_Process")
Dim wmiQuery As String = String.Format("select CommandLine from Win32_Process where Name='{0}'", "explorer.exe")
Dim searcher As Management.ManagementObjectSearcher = New Management.ManagementObjectSearcher(wmiQuery)
Dim retObjectCollection As Management.ManagementObjectCollection = searcher.Get
For Each retObject As Object In colProcess
If retObject.CommandLine.ToString.Contains("--CMD=") Then
retObject.Terminate()
End If
End Sub
夏普:
public static void KillLastProc()
{
var objWMIService = Interaction.GetObject("winmgmts:" + @"{impersonationLevel=impersonate}!\" + Environment.UserDomainName + @"\root\cimv2");
var colProcess = objWMIService.ExecQuery("Select * from Win32_Process");
string wmiQuery = string.Format("select CommandLine from Win32_Process where Name='{0}'", "explorer.exe");
System.Management.ManagementObjectSearcher searcher = new System.Management.ManagementObjectSearcher(wmiQuery);
System.Management.ManagementObjectCollection retObjectCollection = searcher.Get;
foreach (object retObject in colProcess)
{
if (retObject.CommandLine.ToString().Contains("--CMD="))
retObject.Terminate();
}
}
解决方案
您的编译器错误有多种原因。此外,原始 VB 代码有不必要的 WMI 调用。
在处理 WMI 代码之前,我建议您使用 .NetSystem.Diagnostics.Process
类来处理 C# 中的进程。
Process
.GetProcessesByName("explorer")
.Where(x => x.StartInfo.Arguments.Contains("--CMD="))
.ToList()
.ForEach(x => x.Kill());
关于 WMI 代码,您将完成以下任务:
string wmiQuery = string.Format("select * from Win32_Process where Name='{0}'", "explorer.exe");
var searcher = new ManagementObjectSearcher(wmiQuery);
var processes = searcher.Get();
foreach (ManagementObject retObject in processes)
{
foreach(var prop in retObject.Properties)
{
if (prop.Name == "CommandLine" && prop.Value.ToString().Contains("--CMD="))
{
retObject.InvokeMethod("Terminate", null);
}
}
}
推荐阅读
- sql - SQL将空行与非空行合并
- sql-server - Microsoft SQL Server 和 varbinary 数据类型转换
- supercollider - 超级对撞机错误:无法将控件设置为 UGen
- makefile - 如何在 Makefile 中设置变量而不给出值?
- android - 整数共享偏好总是返回 0
- r - 避免在拟合多个线性回归模型时重复编写模型公式
- arrays - 有没有更有效的方法将 24 列组合成一列作为 R 中的数组
- r - 宽到长,有两组要重塑的变量
- javafx - Javafx 在选中复选框时验证 CheckBoxTableCell
- sql-server - 如何将整数转换为 varchar 格式的日期时间