1

我有一个在 VS2005 中开发的 ActiveX 控件。我已将其转换为 VS2008。我的代码中有一个 ComRegisterFunctionAttribute 和一个 ComUnregisterFunctionAttribute,当我在工作中在我的 XP 系统上编译和调试时,一切都运行良好。当我尝试在家里的 Vista 笔记本电脑上运行它时,出现以下错误:

“无法注册程序集“D:\My Documents\Visual Studio 2008 Projects\C#\BLINCodes\BLINCodes\bin\Debug\BLINCodes.dll” - 访问被拒绝。请确保您以管理员身份运行应用程序。访问注册表项 'HKEY_CLASSES_ROOT\RTPS.BLINCodes' 被拒绝。”

我知道对于较新的 64 位操作系统,您必须以管理员身份运行才能注册 dll,但我可以像我一直在做的那样以编程方式进行吗?这是代码:

    [ComRegisterFunctionAttribute]
    public static void RegisterFunction(Type t)
    {
        Microsoft.Win32.Registry.ClassesRoot.CreateSubKey(@"CLSID\{" + t.GUID.ToString().ToUpper() + @"}\Programmable");
        Microsoft.Win32.Registry.ClassesRoot.CreateSubKey(@"CLSID\{" + t.GUID.ToString().ToUpper() + @"}\Control");

        string path = System.Reflection.Assembly.GetAssembly(typeof(BLINCodes)).Location;
        Microsoft.Win32.RegistryKey subkey;
        subkey = Microsoft.Win32.Registry.ClassesRoot.CreateSubKey(@"CLSID\{" + t.GUID.ToString().ToUpper() + @"}\DefaultIcon");
        subkey.SetValue("", path + ",102");
        subkey = Microsoft.Win32.Registry.ClassesRoot.CreateSubKey(@"CLSID\{" + t.GUID.ToString().ToUpper() + @"}\ToolBoxBitmap32");
        subkey.SetValue("", path + ",102");
    }

    [ComUnregisterFunctionAttribute]
    public static void UnregisterFunction(Type t)
    {
        Microsoft.Win32.Registry.ClassesRoot.DeleteSubKey(@"CLSID\{" + t.GUID.ToString().ToUpper() + @"}\Programmable");
        Microsoft.Win32.Registry.ClassesRoot.DeleteSubKey(@"CLSID\{" + t.GUID.ToString().ToUpper() + @"}\Control");
        Registry.ClassesRoot.DeleteSubKey(@"CLSID\{" + t.GUID.ToString().ToUpper() + @"}\ToolBoxBitmap32");
        Registry.ClassesRoot.DeleteSubKey(@"CLSID\{" + t.GUID.ToString().ToUpper() + @"}\DefaultIcon");
    }

感谢您的所有帮助。

毫米

4

0 回答 0