1

VBScript是否可以在不注册的情况下访问 C# DLL 的方法regasm?我将创建 DLL 以使其对 VBScript 可见,几乎可以满足任何奇特的要求,我可以...

我在这里读到它可能可以使用GetObjectfromVBScript来实现这一点,但我已经尝试过但没有成功......除了使 DLL“COM 可见”之外,我还需要做些什么来完成这项工作吗?

我需要避免的原因regasm是它需要管理员权限,并且我需要将此 DLL“静默”部署到可能具有或不具有管理员权限的许多客户端。

4

2 回答 2

2

不,需要注册,这是脚本解释器找到包含您在脚本的 CreateObject() 调用中使用的 ProgId 的 DLL 的唯一方法。带有清单的隔离 COM 不起作用,您无法修改脚本解释器的清单。

有一个技术解决方案,您可以在 HKCU 注册表配置单元中写入注册表项,而无需获取 UAC 提升。Regasm.exe 工具始终将它们写入 HKLM 配置单元中。这也会注册程序集,但仅适用于运行 Regasm.exe 的用户。然而,这非常痛苦且容易出错,您必须编写自己的注册方法并应用[ComRegisterFunction] 属性。现在您的工作就是使用 RegistryKey 类来设置密钥。[ComUnregisterFunction] 也一样,它应该再次删除键。有很多对于互联网上的不良示例,最好的方法是使用 SysInternals 的 ProcMon 来观察在您正常使用 Regasm.exe 时写入的注册表项,然后使用 HKCU 在您自己的代码中重现它。

请注意该奖章的另一面,您实际上是在对允许运行任意代码的机器进行配置更改。试图隐藏对用户没有任何好处,如果您尊重用户保持机器安全和可预测的愿望,则永远不应考虑。UAC 不会阻止您进行更改,它只是通知用户有关它的信息。

于 2013-09-26T17:23:41.510 回答
0

接受的答案不正确,即需要注册才能使用 DLL。您可以使用 GetObject() 方法而不是 CreateObject() 方法,如我对此问题的回答中所示。

在 VBScript 中使用 DLL

于 2017-01-07T22:52:31.440 回答