获取程序和功能列表

本文关键字:列表 功能 程序 获取 | 更新日期: 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)));
    }
}