//RUNAS// import service service.serviceName = "testAardioSrv"; import fsys.log; global.onError = function( err,over ){ if(!over){ import debug; var stack = debug.traceback(,"调用栈",3); } fsys.log.print(err); if( _STUDIO_INVOKED ) return err; } if( !_STUDIO_INVOKED ){ import service.simpleTool; if( service.simpleTool.run(,"Test Aardio Service","这是一个测试服务") ){ //不是服务进程,可以直接双击运行生成的EXE文件,aardio会自动启动简易版服务管理工具。 return 0; } //这个函数用于在进程主线程中启动服务,并且会等待所有服务线程执行结束后才会返回 service.startDispatchThread({ //可以增加多个服务名与服务线程回调函数的键值对 [service.serviceName] = function(serviceName,argv){ //注意此服务回调函数运行于独立线程 import service.threads; //服务线程启动后第一件事应当是注册服务控制线程 var srvStatus = service.registerCtrlThread(serviceName,service.threads.control) //服务切换到运行状态 srvStatus.controlsAccepted = 0x1/*_SERVICE_ACCEPT_STOP*/ srvStatus.currentState = 0x4/*_SERVICE_RUNNING*/; service.updateStatus(srvStatus,serviceName); //启动服务主线程 service.threads.main(serviceName); //原生多线程回调默认不支持 COM 接口,如下创建独立线程可以启用 COM 接口。 //thread.invokeEx(service.threads.main,serviceName); //服务切换到停止状态 srvStatus.controlsAccepted = 0; srvStatus.currentState = 0x1/*_SERVICE_STOPPED*/ service.updateStatus(srvStatus,serviceName) } }) } else { /* 后台服务可在系统启动时自动运行。 后台服务程序本质也是一个控制台程序, 因为后台服务调试不便,开发环境下可以这样启动服务主线程,作为一个普通控制台程序进行调试。 发布后在服务进程中启动以后,不能在用户桌面上直接显示界面, 但可以使用 service.msgbox() 等函数在当前用户桌面上显示交互对话框。 如果需要在桌面显示控制台输出,请在控制面板->管理工具->服务管理器中右键点击注册的服务,属性中勾选:本地系统服务->允许与桌面交互。 编写服务程序,可以调用fsys.log输出日志文件记录运行状态以及错误信息. */ import service.threads; service.threads.main(service.serviceName); }