.net - 如何从 VBScript 调用 Windows 服务的方法?

标签 .net vb.net com windows-services vbscript

假设我创建了一个公开方法 foo(param1 as string)

的 Windows 服务

是否可以以某种方式直接从 VBScript 调用 foo("SomeAwesomeString")(即,无需启动额外的进程)?

用例是这样的:我正在尝试为 hMailServer (hMS) 编写一个“扩展”应用程序,但 hMS 只能在事件发生时调用 VBscript 脚本。我可以让 VBscript 在每次事件发生时启动 .exe,但处理过程涉及打开和关闭与后端数据库的连接。因此,每次调用都非常昂贵。我一直在想,我可以通过使用服务来维护连接(即打开一次并在连接关闭时重新打开它)来减少费用。另外,通过将处理实现为后台工作线程将导致非阻塞处理+更少的进程启动开销。

<小时/>

更新:我是如何做到的

哇。经过大量的搜索和实验,我想我找到了一种方法。我将其作为答案发布在下面。如果有人能给出比我更好的答案,请随时发帖。如果确实更好,我会取消标记我的答案并标记你的答案。

<小时/>

小更新/勘误:

我忘了告诉您 Windows 服务是使用 VB.Net 2010 创建的。抱歉。

<小时/>

最终更新:我放弃

在整个互联网上搜索并不断尝试后,我放弃了。

我决定公开该方法,而是使用命名管道。现在,VBScript 脚本只需写入向 //./pipe/PIPENAME 打开的 FSO,然后让服务弄清楚 VBScript 到底想要什么。

无论如何,感谢您尝试提供帮助, friend 们。

最佳答案

您可以结合使用这两种方法。

按照您的建议实现您的服务,以维持必要的连接。

然后,您从 VBScript 调用一个微小的 .exe,其全部目的是将其命令行参数传递给上述服务。

事实上,不必为每个 api 创建不同的 .exe(例如“hms-foo.exe”、“hms-bar.exe”或其他),只需将 api 的名称设为另一个命令行即可参数。

现在,您可能有一个非常简单的 .exe,例如 hmscom.exe,VBScript 可以使用诸如“hmscom.exe foo SomeAweSomString”之类的命令行来调用它。在内部,hmscom.exe 将执行任何必要的操作来调用导出的 API,即带有参数“SomeAweSomString”的 foo()。

更好的是在 DLL 而不是 .exe 中实现上述功能,并使用标准 rundll32.exe 以命令行参数作为参数来调用 DLL 的入口点,然后所述函数与服务进行通信如上面针对 .exe 的描述。

这将使用户更难通过意外双击 .exe 文件来虚假调用您的服务,因为根本不存在该文件。

关于.net - 如何从 VBScript 调用 Windows 服务的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6125805/

相关文章:

.net - 编译器通过位移操作将按位 AND 添加到表达式树中

c# - 在 PHP 中通过 COM 访问 .NET 程序集

vb.net - 休眠VB.NET

vb.net - Friend 访问修饰符打算在哪里使用?

.net - .NET 中是否有保存数据集的数据结构?

.net - 你好操作系统与 C# 和单声道?

vb.net - 减少菜单项的图标与其文本之间的间距

c# - IReflect 和 DispId

delphi - 实现核心音频 API 事件

c# - Outlook Com 未注册