CAD二次开发,安装程序中写注册表

打印 上一主题 下一主题

主题 886|帖子 886|积分 2668

一、加载dll时写注册表

我们知道,dll加载到cad中后使用
  1. HostApplicationServices.Current.RegistryProductRootKey()
复制代码
就可以拿到当前cad的注册表,那么如果想在安装程序时写,此时并没有cad的环境,要怎么办呢?
二、获取所有已安装的cad的注册表路径

cad在安装后,会在注册表的计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\Hardcopy目录下存放所有已安装的cad的注册表位置

如图,由于我只安装了一个,所以这里只显示一个,我们使用代码即可获取到所有的valueName值
  1. public static List<string> GetHardcopyList()
  2.     {
  3.         List<string> list = new List<string>();
  4.         var key = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Autodesk\Hardcopy");
  5.         if (key != null)
  6.         {
  7.             string[] subKeyNames = key.GetValueNames();
  8.             subKeyNames.Count().Prompt();
  9.             foreach (string name in subKeyNames)
  10.             {
  11.                 list.Add(name);
  12.             }
  13.         }
  14.         return list;
  15.     }
复制代码
 
拿到valueName值后,我们可以用如下方法写上注册表
  1. public static void WriteZcb()
  2.     {
  3.         var names=GetHardcopyList();
  4.         var dllFile = "D:\\123.dll";
  5.         foreach (var name in names)
  6.         {
  7.             var address = "SOFTWARE\" + name + "\\Applications";
  8.             RegisteringCAD(address, dllFile);
  9.         }
  10.     }
  11.     /// <summary>
  12.     /// 注册dll
  13.     /// </summary>
  14.     /// <param name="dllFile">dll文件路径</param>
  15.     /// <returns></returns>
  16.     public static bool RegisteringCAD(string address,string dllFile)
  17.     {
  18.         RegistryKey user = Registry.CurrentUser.OpenSubKey(address, true);
  19.         if (user == null)
  20.         {
  21.             return false;
  22.         }
  23.         RegistryKey keyUserApp = user.CreateSubKey(Path.GetFileNameWithoutExtension(dllFile));
  24.         keyUserApp.SetValue("DESCRIPTION", Path.GetFileNameWithoutExtension(dllFile), RegistryValueKind.String);
  25.         keyUserApp.SetValue("LOADCTRLS", 2, RegistryValueKind.DWord);
  26.         keyUserApp.SetValue("LOADER", dllFile, RegistryValueKind.String);
  27.         keyUserApp.SetValue("MANAGED", 1, RegistryValueKind.DWord);
  28.         return true;
  29.     }
复制代码
 其中 dllFile为要写入的dll路径

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

来自云龙湖轮廓分明的月亮

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表