![如何在 64 位 Windows Server 2012 R2 上为 Powershell 设置 32 位 DLL?](https://linux22.com/image/702389/%E5%A6%82%E4%BD%95%E5%9C%A8%2064%20%E4%BD%8D%20Windows%20Server%202012%20R2%20%E4%B8%8A%E4%B8%BA%20Powershell%20%E8%AE%BE%E7%BD%AE%2032%20%E4%BD%8D%20DLL%EF%BC%9F.png)
我正在升级一台运行 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