翼度科技»论坛 编程开发 .net 查看内容

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

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
一、加载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路径

来源:https://www.cnblogs.com/d1742647821/archive/2023/04/11/17306914.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具