使用c#实现dsoframer.ocx的注册方法

---恢复内容开始---

  最近帮公司开发一个类似于帮助文档的应用时用到了dsoframer.ocx控件,它是由微软提供一款开源的用于在线编辑的控件,其中包括注册,和使用方法网上已经有了许多的教程.可是当我按照各位前辈的教程开发完了自己的应用时我发现我写的东西竟然在别人的电脑上运行不了,why?因为使用者的PC上也要注册dsoframer.ocx才可以运行,而我的应用是专门供非开发人员使用的.要他们自己将控件放入系统盘制定位置,然后再使用命令行注册未免不太现实,关于也影响用户体验.这个网上也有大神给出解决方案.但因为我才疏学浅,多次尝试无果后,我只有自己思考解决方案了,下面给出我的解决方案:

  1.编写好注册用的bat,其中32位和64稍有差别,如下所示

//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.因为是相对路径所以要存放好dsoframer.ocx控件,两个文件夹放入和打包好的应用同一个文件夹中,如下图所示

  3.具体实现代码:

//这段判断代码放入构造方法中,因为如果在只有在构造方法里才没有开始加载控件,否则计算机加载完了from才发现没有这个控件,那就会直接报错
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;elsereturn false;} /// /// 注册Dsoframer/// private void RegisterDso() {string targetDir = "";string reg = "";
       //判断计算机操作系统具体位数32和64区别开
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();}

 

   以上就是我的方案具体实现,第一次写博客,若有不对还请各位不吝赐教.谢谢观看!

 

---恢复内容结束---

转载于:https://www.cnblogs.com/min-zhu/p/7502636.html


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部