注册dll时出现问题 - 访问被拒绝

时间:2009-12-04 15:36:35

标签: regasm dllregistration

尝试在Win2008 Server中运行regasm时:

regasm "C:\Program Files\FooProg\Bar.dll" /tlb:"C:\Program Files\FooProg\Bar.tlb"

我收到以下错误:

  

RegAsm:错误RA0000:保存导出时发生错误   类型库:访问被拒绝。   (HRESULT的例外情况:0x80070005   (E_ACCESSDENIED))

这是什么意思

11 个答案:

答案 0 :(得分:13)

最常出现该错误,因为您无法删除相应的.tlb文件。另外两个建议:

  1. 停止IIS并尝试重新注册:
  2. 停止IIS,从您的DLL文件所在的位置删除.tlb文件,然后再次尝试注册。
  3. 关闭所有IE / IIS / DEV工具(他们可能会将某些文件保持为只读状态),然后尝试注册您的DLL

答案 1 :(得分:9)

运行regasm的帐户无权写入C:\ Program Files \ FooProg \,这就是regasm无法写入.tlb的原因。在具有管理员权限的帐户下运行regasm。

答案 2 :(得分:3)

您使用的帐户需要管理员权限。

答案 3 :(得分:1)

最常出现该错误,因为您无法删除相应的.tlb文件。另外两个建议: 1.停止IIS并尝试再次注册: 2.停止IIS,从DLL文件的任何位置删除.tlb文件,然后再次尝试注册。

答案 4 :(得分:1)

在我的情况下,.dll和.tlb文件都是ReadOnly,删除了为我工作的ReadOnly检查,我也关闭了使用它的过程(Visual Studio IDE)。

答案 5 :(得分:1)

如果未在/tlb参数中指定完整路径,也可能会出现此问题。

它会尝试写入C:\windows\system32。即使您以管理员身份运行,默认情况下您也无权写入该目录。

解决方案只是在/tlb参数中提供完整路径(到您有权访问的目录)。

答案 6 :(得分:1)

由于进程挂钩到您尝试注册或复制的.dll或.tlb文件,很可能会收到错误。重新启动计算机,然后重试或删除.tlb文件并重建它以确保您可以访问它。

答案 7 :(得分:1)

我有一个迷路的dllhost.exe进程。杀死它允许我删除.tlb文件并重新注册。其他方法(停止IIS,停止应用程序池,关闭所有IDE)都没有效果。

答案 8 :(得分:0)

首先,我必须在regasm找到dll文件之前删除路径中的所有空格。

但是当我尝试在目标周围使用引号时,无论如何都会有效。

答案 9 :(得分:0)

Win 7(如果已经是管理员) - 您可以通过右键单击并访问属性,安全选项卡,单击编辑,检查允许权限来启用文件权限,例如,完全控制。

答案 10 :(得分:0)

对我来说,文件正在被其他应用程序使用