NT服务操作
部分操作需要管理权限
返回操作系统活动用户会话ID,
更多会话控制请参考标准库 win.ts
创建服务,
参数@1可为空,默认使用当前应用程序路径,
其他可选参数未列出请查看函数源码
删除服务
注意删除服务前最好关闭服务管理器
for( serviceName,displayName,svrStatusProcess in service.each()){
io.print(serviceName, displayName,svrStatusProcess.state)
}
for id,station,state in service.eachSession(){
if( state == 0 ) return id;/*遍历操作系统所有登录用户会话,
id为会话ID,station为会话名,state为会话状态
state为0为登录激活状态,1为已连接,4为断开状态*/
}
是否存在指定的服务
服务是否正在运行
服务是否已停止
创建管理器
弹出对话框
返回用户操作ID,如果不指定超时值返回IDASYNC 32001
超时值以毫秒为单位,超时为0表示一直等待,不指定超时则不等待用户操作,
除参数一以外,其他所有参数可选
如果参数@1是表对象,自动调用table.tostring序列化为文本
其他类型调用tostring转为字符串
弹出错误对话框
所有者窗口参数可选
如果参数@1是表对象,自动调用table.tostring序列化为文本
其他类型调用tostring转为字符串
返回布尔值表示用户是否按了“确定”按钮。
标题,所有者窗口参数可选
暂停服务,
成功返回true,
失败请使用lasterr函数获取错误信息
service.registerCtrlThread( serviceName,function(control,eventType,pEventData){
}
)
重新启动服务,成功返回true,
超时以秒为单位,省略则不限时间等待操作完成
停止超时达到时间后服务未正常停止则强制中断服务进程
暂停状态恢复运行,
成功返回true,
失败请使用lasterr函数获取错误信息
当前服务线程中运行的NT服务名,
主线程应自行指定
返回操作系统所有登录用户会话,
更多会话控制请参考标准库 win.ts
启动服务,
成功返回true,
失败请使用lasterr函数获取错误信息
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)
}
)
停止服务,
成功返回true,
失败请使用lasterr函数获取错误信息
停止服务,如果失败就强制中断服务进程,
成功返回true,
失败请使用lasterr函数获取错误信息
强制中断服务进程,
成功返回true,
参数@1应是registerCtrlHandler函数的返回值,
在CtrlHandler函数中指定部分需要更新的值即可
binaryPathName
dependencies
displayName
errorControl
loadOrderGroup
serviceStartName
serviceType
startType
tagId
修改配置,其他可选参数未列出请查看函数源码
修改配置
配置值必须是结构体
修改服务说明
关闭
控制服务
创建服务,其他可选参数未列出请查看函数源码
删除服务
注意删除服务前最好关闭服务管理器
for(serviceName,displayName,serviceStatus in ntsrvmgrObject.eachDependent("/*指定服务名列出依赖此服务的服务*/") ){
}
是否存在指定的服务
服务是否正在运行
服务是否已停止
打开服务句柄
暂停服务,
成功返回true,
失败请使用lasterr函数获取错误信息
返回启动路径以及参数
返回配置
获取配置
配置值必须是结构体
返回服务说明
成功返回一个表示服务状态的表对象
暂停状态恢复运行,
成功返回true,
失败请使用lasterr函数获取错误信息
启动服务,
成功返回true,
失败请使用lasterr函数获取错误信息
启动服务并等待服务进程切换到运行状态,
返回打开的进程对象(process 对象),可选用参数@2指定进程访问权限
设置为自动启动
设置为延时启动
设置为禁用
设置为手动启动
停止服务,
成功返回true,
失败请使用lasterr函数获取错误信息
停止服务,如果失败就强制中断服务进程,
成功返回true,
失败请使用lasterr函数获取错误信息
强制中断服务进程,
成功返回true,
等待服务切换到指定状态
状态码不指定时默认为 4/*_SERVICE_RUNNING*/
成功返回一个表示服务状态的表对象
checkPoint
controlsAccepted
currentState
processId
processId
serviceSpecificExitCode
serviceType
state
waitHint
win32ExitCode
_SERVICE_ACCEPT_HARDWAREPROFILECHANGE=0x20
_SERVICE_ACCEPT_NETBINDCHANGE=0x10
_SERVICE_ACCEPT_PARAMCHANGE=0x8
_SERVICE_ACCEPT_PAUSE_CONTINUE=0x2
_SERVICE_ACCEPT_POWEREVENT=0x40
_SERVICE_ACCEPT_SESSIONCHANGE=0x80
_SERVICE_ACCEPT_SHUTDOWN=0x4
_SERVICE_ACCEPT_STOP=0x1
_SERVICE_ADAPTER=0x4
_SERVICE_AUTO_START=0x2
_SERVICE_BOOT_START=0x0
_SERVICE_CONTINUE_PENDING=0x5
_SERVICE_CONTROL_CONTINUE=0x3
_SERVICE_CONTROL_HARDWAREPROFILECHANGE=0xC
_SERVICE_CONTROL_NETBINDADD=0x7
_SERVICE_CONTROL_NETBINDDISABLE=0xA
_SERVICE_CONTROL_NETBINDENABLE=0x9
_SERVICE_CONTROL_NETBINDREMOVE=0x8
_SERVICE_CONTROL_PARAMCHANGE=0x6
_SERVICE_CONTROL_PAUSE=0x2
_SERVICE_CONTROL_POWEREVENT=0xD
_SERVICE_CONTROL_SESSIONCHANGE=0xE
_SERVICE_CONTROL_SHUTDOWN=0x5
_SERVICE_CONTROL_STOP=0x1
_SERVICE_DEMAND_START=0x3
_SERVICE_DISABLED=0x4
_SERVICE_FILE_SYSTEM_DRIVER=0x2
_SERVICE_KERNEL_DRIVER=0x1
_SERVICE_PAUSED=0x7
_SERVICE_PAUSE_PENDING=0x6
_SERVICE_RECOGNIZER_DRIVER=0x8
_SERVICE_RUNNING=0x4
_SERVICE_RUNS_IN_SYSTEM_PROCESS=0x1
_SERVICE_START_PENDING=0x2
_SERVICE_STOPPED=0x1
_SERVICE_STOP_PENDING=0x3
_SERVICE_SYSTEM_START=0x1
_SERVICE_WIN32=0x30
_SERVICE_WIN32_OWN_PROCESS=0x10
_SERVICE_WIN32_SHARE_PROCESS=0x20