2010-10-29 103 views
3

我有一個註冊的ActiveX組件,我在C#項目中引用它。但是,我想知道正在運行的實際組件的原始路徑。這不是執行路徑本身。有沒有比手工搜索註冊表更安全的東西?如何獲取ActiveX組件的註冊路徑

該組件使用簡單/ regserver命令進行註冊(如果相關)。

+0

因此,這是超出進程內的服務器?你可以添加一個屬性(ProcessID)給一個類嗎? – wqw 2010-11-01 20:07:35

+0

是的,進程外。但是,我無法編輯服務器本身,它已編譯且無源代碼。 – MPelletier 2010-11-01 20:45:13

回答

1

使用您的EXE文件的名稱在HKEY_CLASSES_ROOT\CLSID下進行搜索。它應該用作「LocalServer32」的值。

+0

謝謝。我通過在註冊表中篩選發現了這一點。但我的目標是避免這樣做:P – MPelletier 2010-11-02 01:59:57

+0

有許多方法可以通過使用流行的編程語言來閱讀'HKCR \ CLSID \ \ LocalServer32',而imho是一個獨立的工具,並不是必需的。非程序員可以使用'reg query' – Andrey 2011-02-02 18:28:17

1

這是一個從註冊表中獲取值的函數。需要額外的驗證。

using Microsoft.Win32; 

//... 
static string GetCOMPath(string comName) 
{ 
    RegistryKey comKey = Registry.ClassesRoot.OpenSubKey(comName + "\\CLSID"); 
    string clsid = (string)comKey.GetValue(""); 
    comKey = Registry.ClassesRoot.OpenSubKey("CLSID\\" + clsid + "\\LocalServer32"); 
    return (string)comKey.GetValue(""); 
} 

不過,我在想,如果這是不是已經包裹在某處失去了一些C#庫...