---恢復內容開始--- 最近幫公司開發(fā)一個類似于幫助文檔的應用時用到了dsoframer.ocx控件,它是由微軟提供一款開源的用于在線編輯的控件,其中包括注冊,和使用方法網上已經有了許多的教程.可是當我按照各位前輩的教程開發(fā)完了自己的應用時我發(fā)現我寫的東西竟然在別人的電腦上運行不了,why?因為使用者的PC上也要注冊dsoframer.ocx才可以運行,而我的應用是專門供非開發(fā)人員使用的.要他們自己將控件放入系統(tǒng)盤制定位置,然后再使用命令行注冊未免不太現實,關于也影響用戶體驗.這個網上也有大神給出解決方案.但因為我才疏學淺,多次嘗試無果后,我只有自己思考解決方案了,下面給出我的解決方案: 1.編寫好注冊用的bat,其中32位和64稍有差別,如下所示
2.因為是相對路徑所以要存放好dsoframer.ocx控件,兩個文件夾放入和打包好的應用同一個文件夾中,如下圖所示 3.具體實現代碼: //這段判斷代碼放入構造方法中,因為如果在只有在構造方法里才沒有開始加載控件,否則計算機加載完了from才發(fā)現沒有這個控件,那就會直接報錯bool isRegisted = IsRegistered('00460182-9E5E-11D5-B7C8-B8269041DD57');//這是注冊表里的序列,32和64是一樣的 if (!isRegisted) { RegisterDso(); }//判斷控件是否已經注冊 private static bool IsRegistered(String CLSID) { if (String.IsNullOrEmpty(CLSID)) return false; String key = String.Format(@'CLSID\{{{0}}}', CLSID); RegistryKey regKey = Registry.ClassesRoot.OpenSubKey(key); if (regKey != null) return true; else return false; } /// //判斷計算機操作系統(tǒng)具體位數32和64區(qū)別開 if (Environment.Is64BitOperatingSystem) { targetDir = System.Windows.Forms.Application.StartupPath + '\\64注冊\\';//string.Format();//路徑 reg = 'reg64.bat'; } else { targetDir = System.Windows.Forms.Application.StartupPath + '\\32注冊\\';//string.Format();//路徑 reg = 'reg32.bat'; } Process proc = new Process(); proc.StartInfo.WorkingDirectory = targetDir; proc.StartInfo.FileName =reg; proc.StartInfo.Arguments = string.Format('10'); proc.StartInfo.CreateNoWindow = false; proc.StartInfo.Verb = 'runas';//管理員運行 proc.Start(); proc.WaitForExit(); }
以上就是我的方案具體實現,第一次寫博客,若有不對還請各位不吝賜教.謝謝觀看!
---恢復內容結束--- |
|