aardio 文档

aardio 范例: main.aardio

//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);
}

Markdown 格式