gpt4 book ai didi

c# - 列出所有可用的 ProgId

转载 作者:行者123 更新时间:2023-11-30 21:03:39 24 4
gpt4 key购买 nike

我想使用 C# 获取我计算机上所有 progis 的列表。我知道我可以扫描注册表,像这样:

var regClis = Registry.ClassesRoot.OpenSubKey("CLSID");
var progs = new List<string>();

foreach (var clsid in regClis.GetSubKeyNames()) {
var regClsidKey = regClis.OpenSubKey(clsid);
var ProgID = regClsidKey.OpenSubKey("ProgID");
var regPath = regClsidKey.OpenSubKey("InprocServer32");

if (regPath == null)
regPath = regClsidKey.OpenSubKey("LocalServer32");

if (regPath != null && ProgID != null) {
var pid = ProgID.GetValue("");
var filePath = regPath.GetValue("");
progs.Add(pid + " -> " + filePath);
regPath.Close();
}

regClsidKey.Close();
}

代码来自this blog.

有谁知道有没有更简单的方法?另外,据我了解这是如何工作的,上面的代码可能只会给我进程内的 com.如果我还需要进程外的 progids 怎么办?

提前致谢

最佳答案

太简单了。在 CLSID 键中列出 ProgId 是一个选项,不是必需的。我的机器上没有 ProgID 的示例有公文包、CABFolder、FaxCommon.1、JobObject、NetworkConnections、Shell.AutoPlay 等。

您必须从迭代根开始并查找具有名为 CLSID 的子项的键。这给了你 clsid guid。然后打开 HKCR\CLSID\{guid} 并查找路径。

您还必须注意仅为当前用户注册的 ProgID。为此,首先迭代 HKCU\Software\Classes 并过滤您从迭代 HKCR 中找到的所有重复项。

请注意,这一切都相当冒险,您会因设计不当的 COM 组件注册而遇到大量垃圾。使用 try/catch 捕捉垃圾。

关于c# - 列出所有可用的 ProgId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12723821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com