로컬 컴퓨터 (하나는 Windows 7 및 기타 XP SP3)에 설치된 소프트웨어에 대한 정보를 얻으려고하고 있으며 VBScript로 할 수 있지만 C#에서는 할 수 없습니다. 여기 WMI VBScript vs C#
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colSoftware = objWMIService.ExecQuery _
("Select * from Win32_Product")
For Each objSoftware in colSoftware
Wscript.Echo "Name: " & objSoftware.Name
Wscript.Echo "Version: " & objSoftware.Version
Next
및
는 C# 코드이다 :string queryProd = "SELECT * FROM Win32_Product";
ObjectQuery oQuery = new ObjectQuery(queryProd);
ManagementObjectSearcher searcherProd = new ManagementObjectSearcher(oQuery);
ManagementObjectCollection resultCollection = searcherProd.Get();
foreach (ManagementObject prodVar in resultCollection)
{
Console.WriteLine("Product Name: {0}, Version: {1}.",
(prodVar["Name"] == null) ? prodVar["Name"] : "/",
(prodVar["Version"] == null) ? prodVar["Version"] : "/");
}
번째 코드 (C 번호)가 작동되지
여기 VBScript 코드이다. 그것은 나에게 어떤 오류도주지 않는다. 단지 null을 반환한다. 문제는 Win32_ComputerSystem과 같은 다른 WMI 클래스를 사용할 때 C# 코드가 완벽하게 작동한다는 것입니다. 그러나 다시 Win32_DiskDrive 클래스,이 특별한 경우 등에서는 작동하지 않습니다.
결론적으로 C#에서는 WMI가 일부 클래스에서만 작동하며 VBScript에서는 모두 작동합니다. 왜 그런지 궁금합니다.
답변 해 주셔서 감사합니다.
와우. 효과가 있습니다. 좋아, 고마워. 내 생각 엔 "root \\ CIMV2"네임 스페이스가 누락되었습니다. – Dejan
다행입니다. – dhillis
WMI 코드 생성기에 대한 링크를 제공해 주셔서 감사합니다. 그것은 단지 나를 위해 매우 유용한 도구가되었습니다. :) – Dejan