经典ASP错误:Server.CreateObject失败或找不到入口点DllRegisterServer



我刚刚将一个旧的经典ASP应用程序迁移到运行IIS 10的Windows 2016服务器上,我无法使用在运行IIS 8的Windows 2012上完美运行的DLL。

在过去的两天里,我一直在尝试我能想到的一切,但没有运气。甚至用Visual Studio 2017构建了一个新的DLL,也没有奏效。有人碰到这个问题并解决了吗?我希望如此,因为我不想在这一点上倒退。

当调用"Server.CreateObject(nameOfDll("并且错误为"Server.CCreateObject失败"或"找不到入口点DllRegisterServer"时,就会发生这种情况。

DLL是使用MSI安装程序安装的。我还尝试了regsvr32和regasm,但没有成功。我认为这是一个兼容性问题,我希望你们中的一个聪明人知道如何解决这个问题。

**更新**

我安装了一个运行IIS 8的新2012服务器,以测试Lex Li和Lankymart提出的建议。它在那台服务器上工作没有任何问题。然后,我对运行IIS 10的Windows 2016服务器进行了更改,这给我带来了问题,但它没有解决问题,但错误消息发生了变化:"对象不支持此属性或方法"。它似乎正在读取DLL,但无法识别这些方法。

4天后,我发现了一个坚如磐石的解决方案,可以将32位COM DLL安装到运行IIS 10的Windows 2016服务器中。这有点复杂,但它在这里:

有两个注册实用程序必须用于注册32位COM DLL,gacutil.exe和RegAsm.exe。在安装新DLL之前,应确保卸载任何以前的DLL。RegSvr32.exe程序将无法运行。这是一个管理代码DLL。

将DLL文件复制到系统文件夹

Windows Server 2016在2018年7月21日写这篇文章时有一个怪癖。如果您试图通过将COM DLL复制到System32文件夹来注册它,RegAsm将找不到它。

但是,如果您将其复制到SysWow64文件夹并运行RegAsm,您将看到RegAsm将文件导出到System32文件夹。这显然是某种bug解决方案是将DLL文件复制到System32和SysWow64文件夹中

查找regasm和gautil程序

RegASM.exe可以在C:\Windows\Microsoft.NET\Framework\v4.0.30319 中找到

Gacutil.exe可以在C:\Program Files(x86(\Microsoft SDK \Windows\v8.1A\bin\NETFX 4.5.1 Tools 中找到

如果找不到Microsoft SDK文件夹,则必须安装Windows 8.1 SDK,其中包含用于注册32位COM DLL的Gacutil.exe。可以从下载https://developer.microsoft.com/en-us/windows/downloads/sdk-archive.

重要:仅安装.NET Framework 4.5.1。当系统提示您选择要安装的功能时,使用软件开发工具包。

安装DLL

  1. 将DLL和TLB复制到Windows/System32和SysWOW64文件夹中。如果tlb不存在,只需复制dll即可。

  2. 管理员的身份打开命令提示符。

  3. 键入regasm.exe mydll.dll/tlb:mydll.tlb/codebase。应该说类型库已成功注册。如果没有安装DLL,请尝试使用Regsvr32.exe进行安装。某些DLL(如csguid.DLL(需要旧的安装过程。

  4. 键入gacutil.exe/i mydll.dll,这会将dll安装到GAC。如果找不到文件,您可能必须键入gautil/i c:\windows\system32\mydll.dll。GAC是全局程序集缓存,用于跟踪计算机上的所有程序集,以便在调用它们时不会发生冲突。

最新更新