获取程序和功能列表
本文关键字:列表 功能 程序 获取 | 更新日期: 2023-09-27 17:56:15
按照此 MSDN 博客中的代码,我用 C# 提出了以下代码
using Shell32; //Browse to C:'Windows'System32'shell32.dll
private void GetInstalledPrograms()
{
Shell shell = new Shell();
Shell objShell = shell.Application;
string folderName = @"::{26EE0668-A00A-44D7-9371-BEB064C98683}'8'" +
"::{7B81BE6A-CE2B-4676-A29E-EB907A5126C5}";
var objProgramList = objShell.NameSpace(folderName);
if (objProgramList != null)
{
MessageBox.Show(objProgramList.Items().ToString());
}
else
{
MessageBox.Show("Null");
}
}
无论出于何种原因,objProgramList
都是null
.奇怪的是,使用以下Powershell代码,我得到了我想要的东西!我不知道我做错了什么。对我来说,我的两个代码示例都是相同的......
$Shell = New-Object -ComObject Shell.Application
$folderName = "::{26EE0668-A00A-44D7-9371-BEB064C98683}'8'::{7B81BE6A-CE2B-4676-A29E- EB907A5126C5}"
$folder = $Shell.NameSpace($folderName)
if($folder)
{
$folder.Items()
}
您有可能使用 Window 8 吗?根据这个答案,创建这样的外壳在 Window 8 中不起作用。
这个答案为时已晚,但它可能会帮助其他人解决同样的问题。
基本上,代码上的问题是 shell 命令:
string folderName = @"::{26EE0668-A00A-44D7-9371-BEB064C98683}'8'" +
"::{7B81BE6A-CE2B-4676-A29E-EB907A5126C5}";
它应该在命令的开头包含"shell:",它应该看起来像这样:
string folderName = @"shell:::{26EE0668-A00A-44D7-9371-BEB064C98683}'8'::{7B81BE6A-CE2B-4676-A29E-EB907A5126C5}"
要获取有关名称,发布者,安装位置等程序的信息,请尝试以下代码,该代码将枚举所有可用字段:
List<string> arrHeaders = new List<string>();
for (int i = 0; i < short.MaxValue; i++)
{
string header = list.GetDetailsOf(null, i);
if (String.IsNullOrEmpty(header))
break;
arrHeaders.Add(header);
}
foreach (Shell32.FolderItem2 item in list.Items())
{
for (int i = 0; i < arrHeaders.Count; i++)
{
//I used listbox to show the fields
listBox1.Items.Add(string.Format("{0}'t{1}: {2}", i, arrHeaders[i], list.GetDetailsOf(item, i)));
}
}