You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Regasm注册COM库失败,始终提示access denied求助

问题描述

我正在测试一个需注册到COM的小型.NET DLL,供Delphi程序调用,采用COM交互方式。

源码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace MCMTSimulator
{
    public class Simulator
    {
        public int RS232(sbyte[] data)
        {
            return 6;
        }
    }
}

程序集设置

[assembly: ComVisible(true)]
[assembly: ClassInterface(ClassInterfaceType.AutoDual)]
// Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM
[assembly: Guid("b3f59863-c1a6-448b-aaa2-2bfdf292cc27")]

已通过管理员身份启动Visual Studio编译DLL,随后以管理员模式运行控制台执行注册命令:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe MCMTSimulator.dll /register /codebase /tlb

但始终提示 access denied,求解决办法。


解决方案

针对注册时的"access denied"问题,按以下步骤排查:

  • 检查程序集强名称
    .NET 4.0及以后版本中,/codebase参数要求程序集必须拥有强名称签名。如果你的DLL未签名,要么移除/codebase参数,要么给程序集添加强名称:

    1. 在Visual Studio中右键项目 → 属性 → 签名 → 勾选"为程序集签名" → 选择"新建"密钥文件(无需密码)。
    2. 重新编译DLL后再执行注册命令。
  • 选择匹配的regasm版本
    如果是64位系统:

    • 若Delphi程序是32位,使用C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe(32位版本)
    • 若Delphi程序是64位,使用C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe(64位版本)
      确保命令中regasm的路径和DLL的平台目标一致(项目属性 → 生成 → 平台目标)。
  • 调整DLL存放路径
    避免将DLL放在受系统严格权限控制的目录(如Program Files、Windows),将DLL移到普通目录(如C:\Temp)后再执行注册命令,减少权限拦截概率。

  • 使用Visual Studio开发者命令提示符(管理员)
    启动"Visual Studio 开发者命令提示符(管理员)",直接进入DLL所在目录,执行简化命令:

    regasm MCMTSimulator.dll /register /codebase /tlb
    

    该提示符已自动配置.NET环境变量,无需手动输入regasm完整路径,同时确保权限上下文正确。

  • 临时关闭安全软件
    部分杀毒或防火墙软件会拦截注册表写入操作,临时关闭后重试注册,排除软件拦截因素。


内容的提问来源于stack exchange,提问作者michastro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 00:59:59