我正在C#中为只支持ActiveX的遗留应用程序创建自定义控件。该控件在其他应用程序中工作正常,但遗留应用程序仅检查名为“控件”的组件类别而不是“.NET类别”,因此它不会显示在可用控件列表中。
如果我进入regedit并手动将“Control”类别的GUID添加到Implemented Categories,如下所示 - 旧版应用程序找到控件并插入它没有问题。
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{XXXXXXX-XXXX-XXXX-XXXX-XXXXXXX}\Implemented Categories\{40FC6ED4-2438-11CF-A3DB-080036F12502}
我想知道的是 - 在构建期间是否有自动添加此类别的方法?在部署期间,我不希望工程师必须进入注册表并添加此类别。创建注册表补丁是唯一的方法吗?
我正在使用Visual Studio项目来创建用于部署控件的.msi文件。
答案 0 :(得分:1)
您可以使用ComRegisterFunctionAttribute。它使您可以添加abritrary注册码。
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);
}
}