aardio 文档

service 库模块帮助文档

说明

发布为 EXE 以后,在桌面上直接双击运行就会显示控制台。
在控制台窗口按 Y 注册系统服务,按 N 卸载系统服务。 操作系统开机就会自动启动注册成功的后台服务。

服务进程不能在用户桌面上直接显示界面,
新系统在 服务管理器中勾选 【允许与桌面交互】 是无效的。
但可以通过 service.msgbox,service.msgboxErr,service.msgboxTest 等函数向用户桌面发送对话框。

记录运行时数据或错误信息的一些方法:

service 成员列表 #

NT 服务操作
部分操作需要管理权限

service.activeSessionId() #

返回操作系统活动用户会话ID,
更多会话控制请参考标准库 win.ts

service.create(启动路径,服务名,显示全名,服务描述) #

创建服务,
参数@1可为空,默认使用当前应用程序路径,
其他可选参数未列出请查看函数源码

service.delete("服务名") #

删除服务
注意删除服务前最好关闭服务管理器

service.each() #

返回对象:ntsrvsta2Object

service.each(serviceType,serviceState,groupName) #

for( serviceName,displayName,svrStatusProcess in service.each()){
    io.print(serviceName, displayName,svrStatusProcess.state) 
}

service.eachSession() #

for id,station,state in service.eachSession(){
    if( state == 0 ) return id;/*遍历操作系统所有登录用户会话,  
id 为会话 ID,station 为会话名,state 为会话状态。  
state 为 0 表示登录激活状态,1 为已连接,4 为断开状态*/
}

service.isExist("服务名") #

是否存在指定的服务

service.isRunning("服务名") #

服务是否正在运行

service.isStopped("服务名") #

服务是否已停止

service.manager() #

返回对象:ntsrvmgrObject

service.manager(desiredAccess,machineName,databaseName) #

创建管理器

service.msgbox("文本","标题",等待超时值,样式) #

弹出对话框。
返回用户操作 ID,如果不指定超时值则不等待用户操作,并总是返回 32001/*_IDASYNC*/。
超时值以毫秒为单位,超时为 0 表示一直等待,。不指定超时则不等待用户操作。
除参数 @1 以外,其他所有参数可选。
如果参数 @1 是表对象,自动调用 table.tostring 序列化为文本。
参数 @1 是其他类型则调用 tostring 转为字符串。

可选参数 @4 可用字符串或数值指定图标样式(参考 MB 前缀常量值,设为 0 去掉图标与提示音),可选字符串值:

service.msgboxErr("文本","标题") #

弹出错误对话框。
所有者窗口参数可选。
如果参数 @1 是表对象,则自动调用 table.tostring 序列化为文本。
其他类型调用 tostring 转为字符串。

service.msgboxTest("文本","标题") #

返回布尔值表示用户是否按了“确定”按钮。
标题,所有者窗口参数可选

service.pause("服务名") #

暂停服务,
成功返回 true ,
失败请使用 lasterr 函数获取错误信息

service.registerCtrlThread() #

返回对象:ntsrvsta2Object

service.registerCtrlThread(serviceName,handle) #

service.registerCtrlThread( serviceName,function(control,eventType,pEventData){  

    }  
)

service.restart("服务名",停止超时,启动超时) #

重新启动服务,成功返回 true ,
超时以秒为单位,省略则不限时间等待操作完成
停止超时达到时间后服务未正常停止则强制中断服务进程

service.resume("服务名") #

暂停状态恢复运行,
成功返回 true ,
失败请使用 lasterr 函数获取错误信息

service.serviceName #

当前服务线程中运行的 NT 服务名,
主线程应自行指定

service.sessions() #

返回操作系统所有登录用户会话,
更多会话控制请参考标准库 win.ts

service.start("服务名") #

启动服务,
成功返回 true,
失败请使用 lasterr 函数获取错误信息

service.startDispatchThread(服务回调函数表) #

service.service.startDispatchThread(   
    服务名 = function(serviceName,argv){  
        import service;   
        var srvStatus = service.registerCtrlThread(serviceName,function(control,eventType,pEventData){   
            import service;   
            if( control == 0x1/*_SERVICE_CONTROL_STOP*/ ){    
                service.updateStatus({currentState = 0x1/*_SERVICE_STOPPED*/},owner.serviceName);   
            }   
        } )  

        srvStatus.controlsAccepted = 0x1/*_SERVICE_ACCEPT_STOP*/  
        srvStatus.currentState = 0x4/*_SERVICE_RUNNING*/;  
        service.updateStatus(srvStatus,serviceName)  

        /*服务运行代码*/  

        srvStatus.controlsAccepted = 0;  
        srvStatus.currentState = 0x1/*_SERVICE_STOPPED*/  
        service.updateStatus(srvStatus,serviceName)  
    }  
)

service.stop("服务名") #

停止服务,
成功返回 true ,
失败请使用 lasterr 函数获取错误信息

service.stop("服务名",true) #

停止服务,如果失败就强制中断服务进程,
成功返回 true ,
失败请使用 lasterr 函数获取错误信息

service.terminate("服务名") #

强制中断服务进程,
成功返回 true ,

service.updateStatus(服务状态表,服务名) #

参数@1应是registerCtrlHandler函数的返回值,
在CtrlHandler函数中指定部分需要更新的值即可

ntsrvconfigObject 成员列表 #

ntsrvconfigObject.binaryPathName #

binaryPathName

ntsrvconfigObject.dependencies #

dependencies

ntsrvconfigObject.displayName #

displayName

ntsrvconfigObject.errorControl #

errorControl

ntsrvconfigObject.loadOrderGroup #

loadOrderGroup

ntsrvconfigObject.serviceStartName #

serviceStartName

ntsrvconfigObject.serviceType #

serviceType

ntsrvconfigObject.startType #

startType

ntsrvconfigObject.tagId #

tagId

ntsrvmgrObject 成员列表 #

ntsrvmgrObject.changeConfig(serviceName,serviceType,startType) #

修改配置,其他可选参数未列出请查看函数源码

ntsrvmgrObject.changeConfig2("服务名",配置项,配置值) #

修改配置
配置值必须是结构体

ntsrvmgrObject.changeDescription("服务名","说明") #

修改服务说明

ntsrvmgrObject.close() #

关闭

ntsrvmgrObject.control(serviceName,desiredAccess,control) #

控制服务

ntsrvmgrObject.create(启动路径,服务名,显示全名) #

创建服务,其他可选参数未列出请查看函数源码

ntsrvmgrObject.delete("服务名") #

删除服务
注意删除服务前最好关闭服务管理器

ntsrvmgrObject.eachDependent("服务名") #

for(serviceName,displayName,serviceStatus in ntsrvmgrObject.eachDependent("/*指定服务名列出依赖此服务的服务*/") ){

}

ntsrvmgrObject.eachDependent() #

返回对象:ntsrvsta2Object

ntsrvmgrObject.isExist("服务名") #

是否存在指定的服务

ntsrvmgrObject.isRunning("服务名") #

服务是否正在运行

ntsrvmgrObject.isStopped("服务名") #

服务是否已停止

ntsrvmgrObject.open(serviceName,desiredAccess) #

打开服务句柄

ntsrvmgrObject.pause("服务名") #

暂停服务,
成功返回 true ,
失败请使用 lasterr 函数获取错误信息

ntsrvmgrObject.queryBinaryPathName("服务名") #

返回启动路径以及参数

ntsrvmgrObject.queryConfig("服务名") #

返回配置

ntsrvmgrObject.queryConfig() #

返回对象:ntsrvconfigObject

ntsrvmgrObject.queryConfig2("服务名",配置项,配置值) #

获取配置
配置值必须是结构体

ntsrvmgrObject.queryDescription("服务名") #

返回服务说明

ntsrvmgrObject.queryStatus("服务名") #

成功返回一个表示服务状态的表对象

ntsrvmgrObject.queryStatus() #

返回对象:ntsrvsta2Object

ntsrvmgrObject.resume("服务名") #

暂停状态恢复运行,
成功返回 true ,
失败请使用 lasterr 函数获取错误信息

ntsrvmgrObject.start("服务名") #

启动服务,
成功返回 true ,
失败请使用 lasterr 函数获取错误信息

ntsrvmgrObject.startAndWait("服务名",进程权限) #

启动服务并等待服务进程切换到运行状态,
返回打开的进程对象(process 对象),可选用参数@2指定进程访问权限

ntsrvmgrObject.startAndWait() #

返回对象:processObject

ntsrvmgrObject.startAutomatic("服务名") #

设置为自动启动

ntsrvmgrObject.startDelayed("服务名",是否延时) #

设置为延时启动

ntsrvmgrObject.startDisabled("服务名") #

设置为禁用

ntsrvmgrObject.startManual("服务名") #

设置为手动启动

ntsrvmgrObject.stop("服务名") #

停止服务,
成功返回 true ,
失败请使用 lasterr 函数获取错误信息

ntsrvmgrObject.stop("服务名",true) #

停止服务,如果失败就强制中断服务进程,
成功返回 true ,
失败请使用 lasterr 函数获取错误信息

ntsrvmgrObject.terminate("服务名") #

强制中断服务进程,
成功返回 true ,

ntsrvmgrObject.wait("服务名",状态码) #

等待服务切换到指定状态
状态码不指定时默认为 4/*_SERVICE_RUNNING*/
成功返回一个表示服务状态的表对象

ntsrvmgrObject.wait() #

返回对象:ntsrvsta2Object

ntsrvsta2Object 成员列表 #

ntsrvsta2Object.checkPoint #

checkPoint

ntsrvsta2Object.controlsAccepted #

controlsAccepted

ntsrvsta2Object.currentState #

currentState

ntsrvsta2Object.processId #

processId

ntsrvsta2Object.serviceFlags #

processId

ntsrvsta2Object.serviceSpecificExitCode #

serviceSpecificExitCode

ntsrvsta2Object.serviceType #

serviceType

ntsrvsta2Object.state #

state

ntsrvsta2Object.waitHint #

waitHint

ntsrvsta2Object.win32ExitCode #

win32ExitCode

自动完成常量

_SERVICE_ACCEPT_HARDWAREPROFILECHANGE=0x20
_SERVICE_ACCEPT_NETBINDCHANGE=0x10
_SERVICE_ACCEPT_PARAMCHANGE=8
_SERVICE_ACCEPT_PAUSE_CONTINUE=2
_SERVICE_ACCEPT_POWEREVENT=0x40
_SERVICE_ACCEPT_SESSIONCHANGE=0x80
_SERVICE_ACCEPT_SHUTDOWN=4
_SERVICE_ACCEPT_STOP=1
_SERVICE_ACTIVE=1
_SERVICE_ADAPTER=4
_SERVICE_AUTO_START=2
_SERVICE_BOOT_START=0
_SERVICE_CHANGE_CONFIG=2
_SERVICE_CONTINUE_PENDING=5
_SERVICE_CONTROL_CONTINUE=3
_SERVICE_CONTROL_HARDWAREPROFILECHANGE=0xC
_SERVICE_CONTROL_INTERROGATE=4
_SERVICE_CONTROL_NETBINDADD=7
_SERVICE_CONTROL_NETBINDDISABLE=0xA
_SERVICE_CONTROL_NETBINDENABLE=9
_SERVICE_CONTROL_NETBINDREMOVE=8
_SERVICE_CONTROL_PARAMCHANGE=6
_SERVICE_CONTROL_PAUSE=2
_SERVICE_CONTROL_POWEREVENT=0xD
_SERVICE_CONTROL_SESSIONCHANGE=0xE
_SERVICE_CONTROL_SHUTDOWN=5
_SERVICE_CONTROL_STOP=1
_SERVICE_DEMAND_START=3
_SERVICE_DISABLED=4
_SERVICE_FILE_SYSTEM_DRIVER=2
_SERVICE_INACTIVE=2
_SERVICE_INTERROGATE=0x80
_SERVICE_KERNEL_DRIVER=1
_SERVICE_PAUSED=7
_SERVICE_PAUSE_CONTINUE=0x40
_SERVICE_PAUSE_PENDING=6
_SERVICE_RECOGNIZER_DRIVER=8
_SERVICE_RUNNING=4
_SERVICE_RUNS_IN_SYSTEM_PROCESS=1
_SERVICE_START_PENDING=2
_SERVICE_STOPPED=1
_SERVICE_STOP_PENDING=3
_SERVICE_SYSTEM_START=1
_SERVICE_USER_DEFINED_CONTROL=0x100
_SERVICE_WIN32=0x30
_SERVICE_WIN32_OWN_PROCESS=0x10
_SERVICE_WIN32_SHARE_PROCESS=0x20

Markdown 格式