";访问注册表项被拒绝";为COM互操作构建.NET DLL时

本文关键字:quot 构建 互操作 DLL COM NET 拒绝 访问 注册表 | 更新日期: 2023-09-27 18:01:08

目标:构建一个带有COM互操作的C#DLL,供Delphi在另一个环境中调用。

问题:Windows正在阻止我的构建,说我没有编辑注册表的权限。

上下文:

  • 我使用的是Windows 8,Visual Studio 2012,UAC已关闭
  • 我使用RGiesecke的DllExport来用[DllExport]注释我想导出为Dll的方法
  • 我按照这里的建议使用[ComVisible(true)]
  • 我的解决方案平台目标是x86
  • 我编辑了解决方案的生成属性并检查了Build > Output > Register for COM Interop
  • 我通过AssemblyInfo.cs编辑并启用了[assembly: ComVisible(true)]
  • 我用一个强有力的名字在我的集会上签名

如果我不是以管理员身份运行VS2012,我会收到以下错误:Cannot register assembly 'absolute'path'to'NameOf.dll' access denied. Please make sure you're running the application as administrator. Access to the registry key 'HKEY_CLASSES_ROOT'NameOf.DllClass' is denied

也许我需要以管理员身份运行Visual Studio。然而,如果我以管理员身份运行VS2012,我会收到另一个错误(甚至更随机(:Cannot register assembly. Could not load file or assembly 'RGiesecke.DllExport.Metadata, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ad5f9f4a55b5020b' or one of its dependencies. The system cannot find the file specified.

我遵循了FIX的步骤:当你为COM Interop注册.NET程序集时,"访问注册表项被拒绝"错误消息,即定位和更改HKEY_CLASSES_ROOT'Component Categories'{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}的权限。运气不好。

如何获得构建DLL和获取tlb文件所需的权限

";访问注册表项被拒绝";为COM互操作构建.NET DLL时

我也有同样的问题。我也没能修复你在问题中的链接。然而,我确实有工作要做。如果您以管理员身份打开Visual Studio,那么一切都可以(至少对我来说(。

我遇到了同样的问题,我能够通过打开注册表编辑器来解决它,转到错误提到的键。右键单击并选择"权限…"。我确保我的计算机(因为它是工作计算机(的所有用户都具有完全权限。保存,现在它工作没有错误。

Pass"p: RegisterForComInterop=false";使用生成定义的MSBuild Arguments进程参数进行MSBuild,假设生成服务器不需要注册COM组件,只需要生成它。