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

时间:2018-07-20 00:06:00

标签: dll asp-classic windows-server-2016 iis-10

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

我已经花了最后两天的时间尝试一切我想不到的事情。即使使用Visual Studio 2017构建新的DLL-也无法正常工作。有谁遇到这个问题并解决了?我希望如此,因为我讨厌在这一点上退后一步。

当调用“ Server.CreateObject(nameOfDll)”并且错误是“ Server.CreateObject Failed”或“找不到入口点DllRegisterServer”时发生。

使用MSI安装程序安装DLL。我也尝试过regsvr32和高潮,没有运气。我认为这是一个兼容性问题,希望你们中的聪明人知道如何解决。

**更新**

我设置了一个新的运行IIS 8的2012 Server,以测试Lex Li和Lankymart的建议。它在该服务器上正常工作,没有任何问题。然后,我对运行IIS 10的Windows 2016服务器进行了更改,这给了我一个问题,但它没有解决问题,但是错误消息更改了:“对象不支持此属性或方法”。它似乎正在读取DLL,但无法识别这些方法。

1 个答案:

答案 0 :(得分:1)

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

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

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

Windows Server 2016在7/21/18上编写时有一个怪癖。如果您尝试通过将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工具中找到

如果未找到Microsoft SDKs文件夹,则必须安装Windows 8.1 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 AND SysWOW64 文件夹。如果tlb不存在,则只需复制dll。

  2. administrator 身份打开命令提示符。

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

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