【发布时间】:2014-12-02 19:30:10
【问题描述】:
我已经阅读了一些解决这个问题的方法,但没有一个对我有用。主要问题之一是我相当确定我有一个我正在尝试使用的 32 位 dll,并且我正在尝试在 64 位服务器上运行它。我也没有 Interop dll 的源代码。我发现的大多数解决方案都涉及更改 DLL 并重新编译。
我已经使用 RegAsm.exe 注册了这个 dll。 dll 位于 C:\Windows\SysWOW64 文件夹中。它似乎注册正常,没有错误。
我正在尝试将经典 ASP 网站从 Windows Server 2003 (IIS 6) 迁移到 Windows Server 2008 R2 (IIS 7.5)。
我发现的一个解决方案提到了有关创建 VBS 脚本并在 SysWOW64 文件夹中运行该脚本的内容。我不确定为什么在 SysWOW64 文件夹中运行脚本很重要,但我还是这样做了。我仍然无法创建对象。
我刚刚将经典 ASP 页面中的代码复制并粘贴到 VBS 脚本中,并添加了 Wscript.echo 命令。
下面是我的 VBS 脚本。
Dim objCrypt, Key, UID, Pwd
Set objCrypt = CreateObject("MyEncryptionTool.Crypt")
Key = "1234" ' Encryption Key
UID = "äRŸê¬ÈH"
Pwd = "á@‰ë•ÆW¬"
Wscript.echo "UID: " & objCrypt.Decrypt(UID, Key) & vbCrLf & "Pwd: " & objCrypt.Decrypt(Pwd, Key)
CScript.exe 产生的错误信息是:
C:\Windows\SysWOW64\CryptTest.vbs(2, 1) Microsoft VBScript runtime error: ActiveX component can't create object: 'MyEncryptionTool.Crypt'
这与我在经典 ASP 页面中遇到的错误基本相同。
我相当确定它是 32 位编译的,而 Windows Server 2008 是 64 位的,这可能是我的问题的根源。
是否可以在 Windows Server 2008 R2 上使用 32 位 dll?
【问题讨论】:
-
我刚刚在我的 dll 上运行了 Dependency Walker。它说 GPSVC.DLL 和 IESHIMS.DLL 丢失。似乎有 IEFRAME.DLL 和 SHLWAPI.DLL 的警告。我不知道这是否与我的问题有关。我把它扔给比我聪明的人。
-
是的,这是可能的。您需要在应用程序池中启用 32 位应用程序 - 默认情况下设置为 false。
-
我为我的网站创建的应用程序池确实将启用 32 位应用程序设置为 True,但 DefaulAppPool 为 False。不幸的是,当我将 DefaultAppPool 设置为 True 时,没有任何改变。 CreateObject 仍然没有创建对象。
-
你应该听你的依赖walker。如果您的 DLL 缺少依赖项,那么它将无法加载!啊,DLL Hell 的好时光只是不想成为好时光!
-
也许,但是对于这两个 dll 不在 Win 7 或 2008 R2 上的问题的一些答案表明它们不是必需的。但我找不到任何明确的说法,说明它们是必要的还是不必要的。
标签: dll vbscript asp-classic interop windows-server-2008-r2