JScript 和 Windows 服务之间的通信方式
Ways to communicate between JScript and Windows service
我有一个Windows本地服务,它可能会生成一个进程,通过Windows脚本主机执行JScript脚本(在.js文件中)。问题是我需要将脚本在.js文件中生成的结果通知我的服务。传输或简单的 32 位整数或字符串就足够了。有什么方法可以做到这一点?
附言。该代码必须在 Windows XP SP3 或更高版本的操作系统上运行。
最好的办法是创建一个在服务中执行的进程外 COM 对象。只需实现必要的脚本接口并提供一个成员函数来匹配通知,并从脚本中调用它,如下所示:
newObj = new ActiveXObject("localserver.mynotify");
newObj.Notify("finished");
进程的退出代码是否足够?
Windows 脚本主机具有允许您设置退出代码的.Quit(errorCode)
方法。您应该能够直接从服务调用 WSH,并通过传递生成后收到的进程句柄来获取带有 GetProcessExitCode()
的返回代码。
请注意,从 JScript 文件中可以执行的几乎所有操作也可以使用本机代码完成。
是否必须将.js文件作为外部进程执行? Windows 脚本具有 COM 对象,应用可以使用这些对象在其自己的进程中运行脚本。 我使用它在我的服务进程中执行脚本文件,它工作正常。 宿主进程甚至可以实现自己的基于 IDispatch
的类,并将它们传递给脚本引擎,以作为全局对象向脚本公开,以便脚本可以与宿主进程通信,而无需使用 new ActiveXObject
或CreateObject()
来访问这些对象。
我看到你的脚本是用 JScript 编写的,你的应用程序是用 C++ 编写的。
也许完成所需操作的最简单方法是将文件写入服务应有权访问的 programdata 文件夹。也许对特定请求使用 GUID,将其传递给 JScript,以便保证它是一个唯一的文件。不理想。
获取 JScript 输出的另一种方法...你能调用托管代码 (C#) 吗?如果是这样,您可以使用 .基于 NET 或 .NET 可调用的 JavaScript 编译器/解释器。这将允许您避免 IActiveScript,还可以直接从脚本上下文或函数返回中获取值。我用过Jurassic和JavaScriptDotNet,它们都非常易于使用和扩展。
如果您严重依赖 ActiveXObject 调用(即:文件系统对象)并且不想编写组件,这可能会带来问题。JuraScript包装了侏罗纪引擎,并为其添加了ActiveXObject支持以实现COM自动化。
我是一个C++新手,所以我不知道这对你来说有多大的飞跃,尽管我知道可以在托管/C++之间互操作。
只是想我会提到这些场景,因为我没有看到它们列在答案中。
- 如何在c++中为模板函数实例创建快捷方式
- 在c代码之间共享数据的最佳方式
- 在C++中将函数压缩为两种方式
- 以螺旋方式打印矩阵的程序.(工作不好)
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 是否可以使用winusb同时与多个相同的usb设备进行通信
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 创建引用向量的优雅方式
- 如何在Qt WebChannel中以独立于平台的方式在HTML/Javascript和C++之间进行通信?
- 在Visual C ++中与Stockfish(外部可执行文件)通信的最佳方式
- Qt中数据类(模型)和视图/控制器类之间的数据通信的正确方式是什么
- Arduino和Visual Studio C ,2方式串行通信
- 任何与游标Labquest迷你通信的方式
- 成员类之间的通信的正确方式是什么?
- JScript 和 Windows 服务之间的通信方式
- 构建与 Android 应用程序通信的C++程序的最佳方式
- 为客户端-服务器通信构建TCP/IP服务器的最佳方式
- UNIX中两个进程之间通信的最佳方式:一个运行ruby服务器,另一个运行C++客户端
- 与子进程通信的最快方式
- 与dll相互通信的最佳方式是什么?