我想在我的電腦上使用C#獲取所有progis的列表。我知道我可以掃描註冊表,這樣的事情:列出所有可用ProgId
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。如果我還需要進程progid以及怎麼辦?
在此先感謝
'LocalServer32'是用於進程外的。它不能比直接枚舉更簡單。 –
如果你掃描使用如下代碼註冊表,請記住,'RegistryKey'是'IDisposable' - 你應該'Dispose'每個對象從以'OpenSubKey'的調用返回,否則會消耗大量的註冊表手柄,直到垃圾當終結器線程輪到關閉它們時收集。 –