我在C#中使用WMI来获取所有已安装的软件,但它并不显示所有软件只有微软的那些
public ManagementScope GetScope()
{
try
{
//string classScope="winmgmts:" + "{impersonationLevel=impersonate}!\\" + strComputer + "\\root\\cimv2";
string serverString = @"root\cimv2";
ManagementScope scope = new ManagementScope(serverString);
ConnectionOptions options = new ConnectionOptions
{
Impersonation = ImpersonationLevel.Impersonate,
Authentication = AuthenticationLevel.Connect,
EnablePrivileges = true
};
scope.Options = options;
return scope;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
}
public void InvokeMethodsFunctions1()
{
ManagementScope mScope = GetScope();
mScope.Connect();
if (mScope.IsConnected)
{
ManagementClass processClass =
new ManagementClass(mScope.Path);
ManagementObjectSearcher mos = new ManagementObjectSearcher(mScope, new ObjectQuery("SELECT * FROM Win32_Product"));
//get collection of WMI objects
ManagementObjectCollection queryCollection = mos.Get();
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"Result.txt"))
{
textBox1.Text = "";
//enumerate the collection.
foreach (ManagementObject m in queryCollection)
{
// access properties of the WMI object
string line = " " + m["Name"] + " , InstallDate : " + m["InstallDate"] + " LocalPackage : " + m["LocalPackage"];
Console.WriteLine(line);
file.WriteLine(line);
textBox1.Text += line + "\n";
}
}
}
}
那么我的代码有什么问题?我在C#中使用WMI来获取所有已安装的软件,但它并不显示所有软件只有微软的那些
我只是测试你的代码的下面,简化的版本,我看到安装在个人电脑上的一切,甚至是服务,我写了并安装自己:
var products = new ManagementObjectSearcher(new ObjectQuery("SELECT * FROM Win32_Product"));
var result = products.Get();
foreach (var product in result)
{
Console.WriteLine(product.GetPropertyValue("Name").ToString());
}
Console.ReadLine();
它看起来像你被范围缩小您的查询,这可能是你没有看到所有东西的原因,试试看看你是否有更多的运气。
没有什么不对,Win32_Product
WMI类只列出Windows安装(MSI)安装的产品。
是的,这是我的问题,有没有办法我可以列出未安装的产品(MSI) –
@KhaleelHmoz:是的,来自注册表。看到这个问题:[在系统中获取已安装的应用程序](http://stackoverflow.com/q/908850/113116)。 – Helen
我遇到了需要搜索的注册表值的问题,我试图监视某些软件(如果它们已安装),但最近这些软件已将显示名称值本地化,并且即时尝试查找未在注册表中本地化的值,没有这样的价值。所以我试图得到WMI的另一种方式,希望我得到的价值将是英语。现在的第一个问题是我需要获得所有安装的软件,甚至不能从MSI ... :( –
我试图获取未安装MSI软件的名称,这就是为什么有一些软件dosn't出现,因为他们从他们自己的安装程序安装 –