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

一、加载dll时写注册表

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

HostApplicationServices.Current.RegistryProductRootKey()

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

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

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

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

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

public static List<string> GetHardcopyList()
    {
        List<string> list = new List<string>();
        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);
        }
    }
    /// <summary>
    /// 注册dll
    /// </summary>
    /// <param name="dllFile">dll文件路径</param>
    /// <returns></returns>
    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路径

原文链接:https://www.cnblogs.com/d1742647821/archive/2023/04/11/17306914.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:CAD二次开发,安装程序中写注册表 - Python技术站

(0)
上一篇 2023年4月17日
下一篇 2023年4月17日

相关文章

  • C# winform跨线程操作控件的实现

    下面是详细的“C# winform跨线程操作控件的实现”的攻略: 1. 前言 在多线程编程过程中,经常会遇到需求需要在子线程中控制 UI 界面,这时就需要用到跨线程操作控件。在使用 C# 的 WinForm 编程时,我们可以使用 Invoke() 或 BeginInvoke() 方法来实现跨线程操作控件。 2. Invoke() 和 BeginInvoke(…

    C# 2023年5月15日
    00
  • C# File.WriteAllBytes – 将字节数组写入文件

    C#中的File.WriteAllBytes方法 在C#中,File.WriteAllBytes方法用于将byte数组中的内容写入到指定的文件中。 方法签名 public static void WriteAllBytes(string path, byte[] bytes); 参数说明 path : 需要写入的文件的路径 bytes : 需要写入文件的内容…

    C# 2023年4月19日
    00
  • .NET/C#如何判断某个类是否是泛型类型或泛型接口的子类型详解

    要判断一个类是否为泛型类型或泛型接口的子类型,可以使用反射来实现。在使用反射之前,需要了解一些相关概念。 什么是泛型类型?泛型类型是可以接受一个或多个类型参数的类型。例如,List、Dictionary 都是泛型类型。 什么是泛型接口?泛型接口是一个带有一个或多个类型参数的接口。例如,IEnumerable、IList 都是泛型接口。 以下是使用C#代码来判…

    C# 2023年6月6日
    00
  • C#特性(Attribute)

    C#中的特性(Attribute)可以为代码添加元数据信息,这些元数据存储在程序集、类、方法、字段或者属性等级别上,可以在程序运行的时候被读取和使用。在本文中,将详细讲解C#中的特性,包括特性的定义、使用方法以及示例说明。 定义特性 在C#中,特性是一种自定义类型,它必须继承自System.Attribute类。定义一个特性,需要在类的声明上使用[ ]括起来…

    C# 2023年5月31日
    00
  • C#中DataSet、DataTable、DataRow数据的复制方法

    下面是关于C#中DataSet、DataTable、DataRow数据的复制方法的完整攻略。 1. DataSet数据复制方法 1.1 使用复制构造函数 在C#中,可以使用DataSet的复制构造函数来复制一个DataSet对象。复制构造函数会将源数据的结构和内容复制到一个新的DataSet对象中。 DataSet source = new DataSet(…

    C# 2023年5月15日
    00
  • asp.net(c#)动态修改webservice的地址和端口(动态修改配置文件)

    动态修改webservice的地址和端口可以通过修改web.config配置文件中的节点来实现,以下是详细攻略: 读取web.config配置文件 首先,我们需要读取web.config配置文件中的节点,可以使用ConfigurationManager类来实现。代码示例如下: Configuration conf = ConfigurationManager…

    C# 2023年6月3日
    00
  • Asp.Net URL重写的具体实现

    下面我将为您详细讲解Asp.Net URL重写的具体实现。 什么是URL重写 URL重写是指通过将某个URL地址重写成另一个URL地址,来达到URL地址美化或处理URL地址映射的目的。在Web应用程序中,常见的URL重写方式有两种:一种是基于IIS的URL重写模块,另一种是基于Asp.Net的URL重写模块。 Asp.Net URL重写的具体实现 步骤一:启…

    C# 2023年5月31日
    00
  • C#委托初级使用的实例代码

    让我们来详细讲解“C#委托初级使用的实例代码”的完整攻略。 什么是委托? 在C#中,委托是一种特殊类型,它可以将方法作为参数传递给其他方法。换句话说,委托是C#中的函数指针,它可以使代码更加灵活和可扩展。 如何定义委托? 定义一个委托,可以使用 delegate 关键字。定义委托的语法如下: delegate returnType delegateName(…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部