日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

使用c#實(shí)現(xiàn)dsoframer.ocx的注冊方法

 地質(zhì)博士 2018-06-24

---恢復(fù)內(nèi)容開始---

  最近幫公司開發(fā)一個類似于幫助文檔的應(yīng)用時用到了dsoframer.ocx控件,它是由微軟提供一款開源的用于在線編輯的控件,其中包括注冊,和使用方法網(wǎng)上已經(jīng)有了許多的教程.可是當(dāng)我按照各位前輩的教程開發(fā)完了自己的應(yīng)用時我發(fā)現(xiàn)我寫的東西竟然在別人的電腦上運(yùn)行不了,why?因?yàn)槭褂谜叩腜C上也要注冊dsoframer.ocx才可以運(yùn)行,而我的應(yīng)用是專門供非開發(fā)人員使用的.要他們自己將控件放入系統(tǒng)盤制定位置,然后再使用命令行注冊未免不太現(xiàn)實(shí),關(guān)于也影響用戶體驗(yàn).這個網(wǎng)上也有大神給出解決方案.但因?yàn)槲也攀鑼W(xué)淺,多次嘗試無果后,我只有自己思考解決方案了,下面給出我的解決方案:

  1.編寫好注冊用的bat,其中32位和64稍有差別,如下所示

1
2
3
4
5
6
//32位
copy dsoframer.ocx c:\windows\system32\dsoframer.ocx
regsvr32.exe c:\windows\system32\dsoframer.ocx
//64位
copy dsoframer.ocx c:\windows\SysWOW64\dsoframer.ocx
regsvr32.exe c:\windows\SysWOW64\dsoframer.ocx

  2.因?yàn)槭窍鄬β窂剿砸娣藕胐soframer.ocx控件,兩個文件夾放入和打包好的應(yīng)用同一個文件夾中,如下圖所示

  3.具體實(shí)現(xiàn)代碼:

復(fù)制代碼
//這段判斷代碼放入構(gòu)造方法中,因?yàn)槿绻谥挥性跇?gòu)造方法里才沒有開始加載控件,否則計算機(jī)加載完了from才發(fā)現(xiàn)沒有這個控件,那就會直接報錯bool isRegisted = IsRegistered('00460182-9E5E-11D5-B7C8-B8269041DD57');//這是注冊表里的序列,32和64是一樣的 if (!isRegisted) { RegisterDso(); }//判斷控件是否已經(jīng)注冊 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; } /// /// 注冊Dsoframer /// private void RegisterDso() { string targetDir = ''; string reg = '';
       //判斷計算機(jī)操作系統(tǒng)具體位數(shù)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';//管理員運(yùn)行 proc.Start(); proc.WaitForExit(); }
復(fù)制代碼

 

   以上就是我的方案具體實(shí)現(xiàn),第一次寫博客,若有不對還請各位不吝賜教.謝謝觀看!

 

---恢復(fù)內(nèi)容結(jié)束---

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多