我想在这个查询之后找到一些结果,但是在foreach循环的开始,出现了错误“invalid class”。
string wmiQuery = string.Format("SELECT * FROM Win32_Process");
var searcher = new ManagementObjectSearcher(wmiQuery);
var wmiResults = searcher.Get();
foreach (ManagementObject retObject in wmiResults)
{
Console.WriteLine("[{0}]\tName: {1}", retObject["ProcessID"], retObject["Name"]);
}
字符串
我用的是window764,我想知道Win32_Process是否存在。我也用wmi代码创建器从http://www.microsoft.com/downloads/en/details.aspx?familyid=2cc30a64-ea15-4661-8da4-55bbc145c30e&displaylang=en下载,但我没有找到任何Win32_Process。
有人有主意吗?
5条答案
按热度按时间wpcxdonn1#
我解决了我的问题。看起来我的插件损坏了。在用这个步骤测试插件后:
1.单击“开始”,单击“运行”,键入wmimgmt.exe,然后单击“确定”。
1.右键单击“控制台(本地)”,然后单击“属性”。
我看到Win32_Process是一个无效的类,我按照这个步骤修复我的错误,它工作
1)在开始菜单中键入“cmd”
2)键入“net stop winmgmt”并按Enter键
3)打开Windows资源管理器,找到C:\windows\system32<$\ folder的路径,并将Repository文件夹重命名为RepositoryOLD(右键单击并选择“RepositoryFolder”)。
4)重新启动计算机
5)在开始菜单中键入“cmd”
6)键入“net stop winmgmt”并按回车键
7)键入“winmgmt /resetRepository”并重新启动计算机。
xcitsw882#
正如dominus所建议的,使用Process类:
字符串
2cmtqfgy3#
在我看来,异常并没有充分说明问题。下面的代码工作。例如,如果您在作用域中忽略“\cimv2”,则会发生异常。例如,如果您错误地从“Win32_Processes”中选择,则也会发生异常。因此,至少要确保作用域是正确的,查询是正确的。
字符串
esbemjvw4#
只是要添加,因为这是第一件事,弹出谷歌搜索,并有问题,我自己在这里C# wmi查询异常无效类使用ManagmentObjectSearcher
并不是所有的Win32提供程序都有32位和64位版本。如果在64位机器上运行32位应用程序,您可能会得到无效的类。我知道在这种特殊情况下情况并非如此,因为Win32_Process有32位和64位提供程序,但我认为它可能对一些到达这里的人有用。
yeotifhr5#
以下步骤解决了我的无效类问题
1.对于/f %s(在(“dir/B *.mof . mfl ')中),执行mofcomp %s
1.对于(.dll)中的%i,请执行regSvr32 -s %i
1.净停止winmgmt /y
(VPN如果您在公司计算机上,则在步骤6中应打开)