gpt4 book ai didi

.net - 是否可以指定由 regasm 创建的 ClassID 注册表项的默认值?

转载 作者:行者123 更新时间:2023-12-04 06:47:47 29 4
gpt4 key购买 nike

当使用 regasm 为 COM 互操作注册程序集时,它所做的一件事是创建一个 HKEY_CLASSES_ROOT\CLSID{000…000} 注册表项,其默认值为 COM 类的 ProgId(请参阅 MSDN 文章 Registering Assemblies with COM)。

是否可以将 regasm 设置的字符串指定为键的默认值? IE。给它一个更有意义的名字?

例如:

HKEY_CLASSES_ROOT\CLSID{000…000}\Default = "我真正有用的类的描述性名称"

代替:

HKEY_CLASSES_ROOT\CLSID{000…000}\Default = "An.Obscure.Prog.Id"

我想可以在 regasm 设置后调整注册表值,但如果我能说服 regasm 这样做会更容易。

最佳答案

我认为问题和答案都错了。这里涉及三个名称:

  • ClassId 或 GUID,采用熟悉的格式,例如“{F4754C9B-64F5-4B40-8AF4-679732AC0607}”
  • ProgId 或编程名称,其格式应为 Vendor.Component.Version(参见 http://msdn.microsoft.com/en-us/library/aa911706.aspx) - 例如“Word.Document.12”
  • 人类可读的名称 - 这是通常显示在 COM 组件列表中的名称(如 VS 中的添加引用/COM 对话框或 OLE 应用程序中的插入 -> 对象菜单),例如“Microsoft Word 文档”

  • 注册表中的相应条目是:
    CLASSES_ROOT\CLSID\ClassId @= "Human readable name"
    CLASSES_ROOT\CLSID\ClassId\ProgId @= "ProgId"
    CLASSES_ROOT\ProgId @= "Human readable name"
    CLASSES_ROOT\ProgId\CLSID @= "ClassId"

    有关一些示例,请参阅您自己的注册表。

    如果您考虑 regasm.exe,您会发现它始终使用 Type.FullName 作为人类可读的名称。这很麻烦,因为这意味着您必须使用 com 注册 Hook 来设置 HRN。例如,他们可以很容易地查找 DisplayName 属性,然后改用它。无论如何,这是一个设置 HRN 条目的辅助函数。从您的注册 Hook 调用它。

    有关 COM 注册 Hook 的更多详细信息,请参阅 http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.comregisterfunctionattribute.aspx
    public static void SetHumanReadableName(Type t, string humanReadableName)
    {
    var classKeyName = string.Format(@"CLSID\{{{0}}}", t.GUID);
    var classKey = Registry.ClassesRoot.OpenSubKey(classKeyName, true);
    if (classKey == null)
    return;
    classKey.SetValue(string.Empty, humanReadableName);
    // if it has a progid set the HRN on the progid entry too
    foreach (ProgIdAttribute progId in t.GetCustomAttributes(typeof(ProgIdAttribute), false))
    {
    var progIdKey = Registry.ClassesRoot.OpenSubKey(progId.Value, true);
    if (progIdKey != null)
    progIdKey.SetValue(string.Empty, humanReadableName);
    }
    }

    关于.net - 是否可以指定由 regasm 创建的 ClassID 注册表项的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3526927/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com