最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

当前关注:CAD二次开发,安装程序中写注册表

来源:博客园


(资料图片)

一、加载dll时写注册表

我们知道,dll加载到cad中后使用

HostApplicationServices.Current.RegistryProductRootKey()

就可以拿到当前cad的注册表,那么如果想在安装程序时写,此时并没有cad的环境,要怎么办呢?

二、获取所有已安装的cad的注册表路径

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

如图,由于我只安装了一个,所以这里只显示一个,我们使用代码即可获取到所有的valueName值

public static List GetHardcopyList()    {        List list = new List();        var key = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Autodesk\Hardcopy");        if (key != null)        {            string[] subKeyNames = key.GetValueNames();            subKeyNames.Count().Prompt();            foreach (string name in subKeyNames)            {                list.Add(name);            }        }        return list;    }

拿到valueName值后,我们可以用如下方法写上注册表

public static void WriteZcb()    {        var names=GetHardcopyList();        var dllFile = "D:\\123.dll";        foreach (var name in names)        {            var address = "SOFTWARE\\" + name + "\\Applications";            RegisteringCAD(address, dllFile);        }    }    ///     /// 注册dll    ///     /// dll文件路径    ///     public static bool RegisteringCAD(string address,string dllFile)    {        RegistryKey user = Registry.CurrentUser.OpenSubKey(address, true);        if (user == null)        {            return false;        }        RegistryKey keyUserApp = user.CreateSubKey(Path.GetFileNameWithoutExtension(dllFile));        keyUserApp.SetValue("DESCRIPTION", Path.GetFileNameWithoutExtension(dllFile), RegistryValueKind.String);        keyUserApp.SetValue("LOADCTRLS", 2, RegistryValueKind.DWord);        keyUserApp.SetValue("LOADER", dllFile, RegistryValueKind.String);        keyUserApp.SetValue("MANAGED", 1, RegistryValueKind.DWord);        return true;    }

其中 dllFile为要写入的dll路径

关键词: