如何在 64 位 Windows Server 2012 R2 上为 Powershell 设置 32 位 DLL?

如何在 64 位 Windows Server 2012 R2 上为 Powershell 设置 32 位 DLL?

我正在升级一台运行 Windows Server 2012 R2 的服务器上 Powershell 的一些过时的 VBScript 自动化。目前,我正在替换一个需要从第三方 32 位 DLL 创建 COM 对象的脚本。首先,我安装了包含该 DLL 的第三方程序;它安装良好并运行正常。然后,我尝试在 Powershell 中创建 COM 对象,但失败了,并返回错误“80040154 类未注册”,其 CLSID 不全为零。

我尝试进行故障排除,发现如果我使用 Powershell (x86),它会创建 COM 对象。然后我猜想可能是 DLL 没有为 64 位 Powershell 注册,并使用 sysWoW64/regsvr32 注册了 DLL。这并没有解决问题,所以我还用 system32/regsvr32 注册了它,但这也没有解决问题。

然后我求助于 Google,找到了 2009 年的这个解决方案:解决方案链接。这实际上确实解决了问题,允许在 64 位 Powershell 中创建和使用 COM 对象。但是,这在很大程度上是一种黑客行为,必须手动编辑注册表并不是最易于维护的解决方案。

因此,我的问题是:我应该如何正确设置 32 位 DLL 以与 64 位 Powershell 一起运行?执行上述解决方案的“正确”方法是什么?

答案1

如果您被这种 DLL 困住了,那么使用 32 位版本的 Powershell 或 VBscript 从 SysWow64 路径运行脚本可能会让您获得最大的成功。这似乎有点倒退,但 64 位 EXE 位于 System32 中。

C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
C:\Windows\SysWOW64\cscript.exe

相关内容