1

我正在 C# 中为仅支持 ActiveX 的旧版应用程序创建自定义控件。该控件在其他应用程序中运行良好,但是旧版应用程序仅检查名为“控件”的组件类别而不是“.NET 类别”,因此它不会显示在可用控件列表中。

如果我进入 regedit 并手动将“控件”类别的 GUID 添加到已实现的类别中,如下所示 - 旧版应用程序会找到控件并将其插入没有问题。

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{XXXXXXX-XXXX-XXXX-XXXX-XXXXXXX}\Implemented Categories\{40FC6ED4-2438-11CF-A3DB-080036F12502}

我想知道的是 - 在构建过程中是否有一种自动添加此类类别的方法?在部署期间,我不希望工程师必须进入注册表并添加此类别。创建注册表补丁是唯一的方法吗?

我正在使用 Visual Studio 项目来创建用于部署控件的 .msi 文件。

4

1 回答 1

2

您可以使用ComRegisterFunctionAttribute。它使您能够添加任意注册码。

using System;
using Microsoft.Win32;
using System.Runtime.InteropServices;
public class MyClassThatNeedsToRegister
{
   Guid categoryGuid = ...;

   [ComRegisterFunctionAttribute]
   public static void RegisterFunction(Type t)
   {
       RegistryKey key = Registry.ClassesRoot.CreateSubKey(
     "CLSID\\" + t.GUID.ToString("B") + 
     "\\Implemented Categories\\" + categoryGuid.ToString("B");
   }

   [ComUnregisterFunctionAttribute]
   public static void UnregisterFunction(Type t)
   {
      Registry.ClassesRoot.DeleteSubKey( "CLSID\\" + t.GUID.ToString("B") +
       "\\Implemented Categories\\" + categoryGuid.ToString("B"), false);
   }
}
于 2012-06-28T03:03:09.067 回答