C#開發系統時,有時候會遇到調用其他語言開發的模塊。如果對方提供了OCX時,就需要注冊使用,但是實時時,每個客戶端都注冊一遍就比較麻煩。所以需要系統第一次啟動時自動注冊OCX。
一:C#注冊OCX
首先,大家都知道在Windows的“運行”中,輸入“Regsvr32.exe 路徑”這樣的方法來手動注冊Dll控件(OCX),顯示這種方法對於程序的自動化部署等帶來極大的不便,因此,今天我們着重介紹如何用C#實現自動注冊。
既然可以在運行欄中輸入“Regsvr32.exe 路徑”的方法來注冊,那么,一定可以在C#程序中采用同樣的方法來調用Regsvr32,以實現注冊:
Process p = new Process(); p.StartInfo.FileName = "Regsvr32.exe"; p.StartInfo.Arguments = "/s C:\\DllTest.dll";//路徑中不能有空格 p.Start();
用這種方法,注意要添加對命名空間System.Diagnostics的引用:
using System.Diagnostics;
另外,這種方法有一個不足之處,那就是注冊工作是在本程序之外由Regsvr32.exe程序來完成的,系統內不方便知道注冊的結果,也不方便對注冊過程彈出的對話框進行自定義和控制。這里附Regsvr32的參數說明:(感謝網友伍華聰的提醒)
regsvr32.exe是32位系統下使用的DLL注冊和反注冊工具,使用它必須通過命令行的方式使用,格式是:
regsvr32 [/u] [/s] [/n] [/i[:cmdline]] DLL文件名
命令可以在“開始→運行”的文本框中,也可以事先在bat批處理文檔中編寫好命令。未帶任何參數是注冊DLL文件功能,其它參數對應功能如下:
/u:反注冊DLL文件;
/s:安靜模式(Silent)執行命令,即在成功注冊/反注冊DLL文件前提下不顯示結果提示框。
/c:控制端口;
/i:在使用/u反注冊時調用DllInstall;
/n:不調用DllRegisterServer,必須與/i連用。
二:驗證的OCX是否注冊的方法
調用注冊表根據你要注冊的ocx名稱查詢一下
/// <summary> /// 檢查指定的 COM 組件是否已注冊到系統中 /// </summary> /// <param name="clsid">指定 COM 組件的Class Id</param> /// <returns>true: 表示已注冊;false: 表示未注冊</returns> public static System.Boolean IsRegistered(String clsid) { //參數檢查 System.Diagnostics.Debug.Assert(!String.IsNullOrEmpty(clsid), "clsid 不應該為空"); //設置返回值 Boolean result=false; //檢查方法,查找注冊表是否存在指定的clsid String key = String.Format(@"CLSID\{{{0}}}", clsid); RegistryKey regKey = Registry.ClassesRoot.OpenSubKey(key); if (regKey != null) { result = true; } return result; }//end method
參考文檔:
http://www.xqblog.top/Article.aspx?id=ART2018030600001