【问题标题】:Getting a dll to work in hta with vbs使用 vbs 让 dll 在 hta 中工作
【发布时间】:2015-03-10 09:40:19
【问题描述】:

我正在尝试让 vbScript 在 hta 中工作。

vbs在我独立运行时工作正常,但是当我尝试在hta中使用它时,它无法加载dll文件。

我曾尝试使用 regasm / codebase 来注册 dll,但这也无济于事。使用 regsvr32 不是一个选项,因为它不能在计算机上以管理员身份运行。

我正在使用ExecuteGlobal 将 vbs 文件放入 hta,但我也尝试过创建一个仅从 hta 运行 vbs 的命令,但仍然失败。

我是否忽略了一些琐碎的事情?

【问题讨论】:

  • 如果您使用的是64位操作系统,请检查正在执行的mshta.exe是32位还是64位版本,并且它与组件和组件注册匹配
  • 在使用 syswow64 和 system32 文件夹时都会发生错误。
  • 好吧,由于某种原因,即使我指定了要运行的 system32,它仍在运行 syswow64。我现在可以通过 cmd 运行它来做到这一点,这是否意味着我必须有另一个包装器,告诉它使用 system32 而不是 syswow64 打开我的 hta,如果我希望我的用户能够只单击一个图标来运行它?
  • 执行ftype htafile可以看到默认的handler放在syswow64中。您将需要一个包装器,或者更改注册表,或者更好,使用与包装器相同的 hta,让您的 hta 确定它是在 32 位还是 64 位版本中运行,如果它是错误的,则启动正确的版本并自行结束.
  • 看起来在这种情况下我将不得不使用包装器,据我所知,Windows 在识别哪个 mshta.exe 正在运行时存在一些问题,因为它们的名称相同。我在另一个 vbs 中简单地调用了%WinDir%\System32\mshta.exe c:\page.hta

标签: dll vbscript hta


【解决方案1】:

您可以使用 Regsvr32 注册 COM dll(通常,但也有例外,例如 RTF 5 和更高版本的控件)。您可以使用 RegAsm 注册伪装成 COM dll 的 .NET dll。 两者都需要管理员权限

*.NET dll 将核心 .NET dll 注册为 COM 处理程序,它将 COM 调用分派给 .NET 组件 DLL,这与 COM 不同,COM 通常没有任何阻碍。

要注册 .NET dll 而不是管理员需要您从 RegAsm 导出为 reg 文件(非管理员可以这样做)。搜索 HKCR 并将其替换为 HKCU\Software\Classes。然后,非管理员可以合并 reg 文件。

【讨论】:

    【解决方案2】:

    当告诉 Windows 运行 hta 时,它会自动假定为 32 位。要让它在 64 位系统上运行,请使用 %WinDir%\System32\mshta.exe c:\page.hta

    需要某种包装器或启动器来确保您运行的是正确的 mshta 版本

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多