windows c#简单的SQL查询中的“Invalid class”

jogvjijk  于 11个月前  发布在  Windows
关注(0)|答案(5)|浏览(153)

我想在这个查询之后找到一些结果,但是在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。
有人有主意吗?

wpcxdonn

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”并重新启动计算机。

xcitsw88

xcitsw882#

正如dominus所建议的,使用Process类:

...
Process[] processes = Process.GetProcesses();

foreach (Process process in processes)
    Console.WriteLine(process.ProcessName);
...

字符串

2cmtqfgy

2cmtqfgy3#

在我看来,异常并没有充分说明问题。下面的代码工作。例如,如果您在作用域中忽略“\cimv2”,则会发生异常。例如,如果您错误地从“Win32_Processes”中选择,则也会发生异常。因此,至少要确保作用域是正确的,查询是正确的。

ManagementScope scope = new ManagementScope(@"\\localhost\root\cimv2");
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_Process");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
foreach (ManagementBaseObject eachObject in searcher.Get())
{
    Console.WriteLine("Value: {0}", eachObject);
}

字符串

esbemjvw

esbemjvw4#

只是要添加,因为这是第一件事,弹出谷歌搜索,并有问题,我自己在这里C# wmi查询异常无效类使用ManagmentObjectSearcher
并不是所有的Win32提供程序都有32位和64位版本。如果在64位机器上运行32位应用程序,您可能会得到无效的类。我知道在这种特殊情况下情况并非如此,因为Win32_Process有32位和64位提供程序,但我认为它可能对一些到达这里的人有用。

yeotifhr

yeotifhr5#

以下步骤解决了我的无效类问题

  • 从提升的cmd提示符运行:
  1. cd C:\Windows\System32\Wbem
    1.对于/f %s(在(“dir/B *.mof . mfl ')中),执行mofcomp %s
    1.对于(
    .dll)中的%i,请执行regSvr32 -s %i
    1.净停止winmgmt /y
  2. net start winmgmt
  3. gpupdate /force
    (VPN如果您在公司计算机上,则在步骤6中应打开)

相关问题