Classic ASP Error: Server.CreateObject Failed or entry-point DllRegisterServer was not found
Classic ASP Error: Server.CreateObject Failed or entry-point DllRegisterServer was not found
我刚刚将旧的经典 ASP 应用程序迁移到 Windows 2016 服务器 运行ning IIS 10,我无法使用 运行 在 Windows 2012 运行宁 IIS 8。
过去 2 天我尝试了所有我能想到的方法,但都没有成功。即使使用 Visual Studio 2017 构建新的 DLL - 也没有用。有没有人 运行 解决了这个问题?我希望如此,因为我讨厌在这一点上倒退。
当调用 "Server.CreateObject(nameOfDll)" 并且错误是 "Server.CreateObject Failed" 或 "entry-point DllRegisterServer was not found" 时会发生这种情况。
DLL 是使用 MSI 安装程序安装的。我也尝试过 regsvr32 和 regasm,但没有成功。我认为这是一个兼容性问题,我希望你们中的聪明人知道如何解决。
** 更新 **
我设置了一个新的 2012 Server 运行ning IIS 8 来测试 Lex Li 和 Lankymart 提出的建议。它在该服务器上运行没有任何问题。然后我对 Windows 2016 服务器 运行ning IIS 10 进行了更改,这给我带来了问题,但没有解决问题,但错误消息已更改:"Object doesn't support this property or method"。它似乎在读取 DLL,但无法识别这些方法。
4 天后,我发现了一个可靠的解决方案,用于将 32 位 COM DLL 安装到 Windows 2016 服务器 运行ning IIS 10 中。它有点复杂,但它是:
必须使用两个注册实用程序来注册 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 文件夹。这显然是某种错误。 解决方法是将 DLL 文件复制到 System32 和 SysWow64 文件夹中。
找到 regasm 和 gacutil 程序
RegASM.exe可以在C:\Windows\Microsoft.NET\Framework\v4.0.30319
中找到
Gacutil.exe 可以在 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools
中找到
如果找不到 Microsoft SDKs 文件夹,您将必须安装 Windows 8.1 SDK,其中包含 Gacutil.exe 用于注册 32 位 COM DLL。可以从 https://developer.microsoft.com/en-us/windows/downloads/sdk-archive 下载。
重要提示:仅安装 .NET Framework 4.5.1。当系统提示您 select 您要安装的功能时,软件开发工具包。
正在安装 DLL
将 DLL 和 TLB 复制到 Windows/System32 和 SysWOW64 文件夹。如果tlb不存在,直接复制dll即可。
以 管理员身份打开命令提示符。
键入 regasm.exe mydll.dll /tlb:mydll.tlb /codebase。应该说类型库注册成功了。如果 DLL 未安装,请尝试使用 Regsvr32.exe 安装它。某些 dll,如 csguid.dll 需要旧的安装过程。
键入 gacutil.exe /i mydll.dll,这会将 DLL 安装到 GAC。如果找不到该文件,您可能必须键入 gacutil /i c:\windows\system32\mydll.dll。 GAC 是全局程序集缓存并跟踪计算机上的所有程序集,以便在调用它们时不会发生冲突。
我刚刚将旧的经典 ASP 应用程序迁移到 Windows 2016 服务器 运行ning IIS 10,我无法使用 运行 在 Windows 2012 运行宁 IIS 8。
过去 2 天我尝试了所有我能想到的方法,但都没有成功。即使使用 Visual Studio 2017 构建新的 DLL - 也没有用。有没有人 运行 解决了这个问题?我希望如此,因为我讨厌在这一点上倒退。
当调用 "Server.CreateObject(nameOfDll)" 并且错误是 "Server.CreateObject Failed" 或 "entry-point DllRegisterServer was not found" 时会发生这种情况。
DLL 是使用 MSI 安装程序安装的。我也尝试过 regsvr32 和 regasm,但没有成功。我认为这是一个兼容性问题,我希望你们中的聪明人知道如何解决。
** 更新 **
我设置了一个新的 2012 Server 运行ning IIS 8 来测试 Lex Li 和 Lankymart 提出的建议。它在该服务器上运行没有任何问题。然后我对 Windows 2016 服务器 运行ning IIS 10 进行了更改,这给我带来了问题,但没有解决问题,但错误消息已更改:"Object doesn't support this property or method"。它似乎在读取 DLL,但无法识别这些方法。
4 天后,我发现了一个可靠的解决方案,用于将 32 位 COM DLL 安装到 Windows 2016 服务器 运行ning IIS 10 中。它有点复杂,但它是:
必须使用两个注册实用程序来注册 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 文件夹。这显然是某种错误。 解决方法是将 DLL 文件复制到 System32 和 SysWow64 文件夹中。
找到 regasm 和 gacutil 程序
RegASM.exe可以在C:\Windows\Microsoft.NET\Framework\v4.0.30319
中找到Gacutil.exe 可以在 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools
中找到如果找不到 Microsoft SDKs 文件夹,您将必须安装 Windows 8.1 SDK,其中包含 Gacutil.exe 用于注册 32 位 COM DLL。可以从 https://developer.microsoft.com/en-us/windows/downloads/sdk-archive 下载。
重要提示:仅安装 .NET Framework 4.5.1。当系统提示您 select 您要安装的功能时,软件开发工具包。
正在安装 DLL
将 DLL 和 TLB 复制到 Windows/System32 和 SysWOW64 文件夹。如果tlb不存在,直接复制dll即可。
以 管理员身份打开命令提示符。
键入 regasm.exe mydll.dll /tlb:mydll.tlb /codebase。应该说类型库注册成功了。如果 DLL 未安装,请尝试使用 Regsvr32.exe 安装它。某些 dll,如 csguid.dll 需要旧的安装过程。
键入 gacutil.exe /i mydll.dll,这会将 DLL 安装到 GAC。如果找不到该文件,您可能必须键入 gacutil /i c:\windows\system32\mydll.dll。 GAC 是全局程序集缓存并跟踪计算机上的所有程序集,以便在调用它们时不会发生冲突。