我有一个在 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");
}
感谢您的所有帮助。
毫米