C# 自動注冊OCX方法


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

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM