使用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;
            else
                return false;
        } 

       
        /// <summary>
        /// 注册Dsoframer
        /// </summary>
        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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值