加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 05:40:01 所属栏目:Windows 来源:网络整理
导读:假设我创建了一个 Windows服务,公开了一个方法foo(param1 as string) 是否有可能以某种方式直接从VBScript调用foo(“SomeAwesomeString”)(即,无需启动其他进程)? 用例是这样的:我正在尝试为hMailServer(hMS)编写一个“扩展”应用程序,但是hMS只能在事件发
假设我创建了一个 Windows服务,公开了一个方法foo(param1 as string)

是否有可能以某种方式直接从VBScript调用foo(“SomeAwesomeString”)(即,无需启动其他进程)?

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

更新:我是怎么做到的

呼.经过大量的搜索和实验,我想我找到了一条路.我将在下面发布它作为答案.如果有人能给出比我更好的答案,请随时发布.如果它确实更好,我将取消标记我的答案并标记你的答案.

次要更新/错误:

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

最后更新:我放弃了

在整个互联网上搜索 – 并且无端地进行实验 – 我放弃了.

我决定不公开该方法,而是使用命名管道.现在VBScript脚本只需要写入一个打开到//./pipe/PIPENAME的FSO,让服务找出VBScript想要的内容.

无论如何,谢谢你的帮助,朋友.

解决方法

您可以将这两种方法结合起来.

按照您的建议实施您的服务,以维护必要的连接.

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

实际上,不必为每个api创建不同的.exe(例如,“hms-foo.exe”,“hms-bar.exe”或其他),而是将api的名称设置为另一个命令行参数.

现在,您可能有一个非常简单的.exe,例如,hmscom.exe,VBScript可以使用命令行调用,例如“hmscom.exe foo SomeAweSomString”.在内部,hmscom.exe将使用参数“SomeAweSomString”执行调用导出的API foo()所需的任何操作.

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

这将使用户更加难以通过意外双击.exe文件来虚假地调用您的服务,因为没有一个.exe文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读