首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

PB调用api函数CreateService创办系统服务

2012-09-18 
PB调用api函数CreateService创建系统服务of_createservice函数(string lpservicename,string lpdisplaynam

PB调用api函数CreateService创建系统服务
of_createservice函数(string lpservicename,string lpdisplayname,unsignedlong dwdesiredaccess,unsignedlong dwservicetype,unsignedlong dwstarttype,unsignedlong dwerrorcontrol,string lpbinarypathname,string lploadordergroup,unsignedlong lpdwtagid,string lpdependencies,string lp,string lppassword)

C/C++ code
uLong hSCManager, hService, r, r1, ll_rtn, ll , hCSrvStatestring s, ls_nullQUERY_SERVICE_CONFIG scfgsetnull(ls_null)hSCManager = OpenSCManager(ls_null, ls_null, SC_MANAGER_ALL_ACCESS)If hSCManager > 0 Then    hCSrvState = CreateService(hSCManager,    ref lpServiceName, ref lpDisplayName, dwDesiredAccess, dwServiceType, dwStartType, dwErrorControl,    ref lpBinaryPathName, ref lpLoadOrderGroup, ref lpdwTagId, ref lpDependencies, ref lp, ref lpPassword)    if isnull(hCSrvState) then        return false    else        return true    end ifEnd Ifreturn false


Local External Functions
C/C++ code
FUNCTION ulong OpenSCManager(ref string lpMachineName,ref string lpDatabaseName,ulong dwDesiredAccess) LIBRARY "advapi32.dll" ALIAS FOR "OpenSCManagerA" FUNCTION ulong CreateService(ulong hSCManager,ref string lpServiceName,ref string lpDisplayName,ulong dwDesiredAccess,ulong dwServiceType,ulong dwStartType,ulong dwErrorControl,ref string lpBinaryPathName,ref string lpLoadOrderGroup,ref ulong lpdwTagId,ref string lpDependencies,ref string lp,ref string lpPassword) LIBRARY "advapi32.dll" ALIAS FOR "CreateServiceA"


Instance Variables
C/C++ code
private:constant ulong SC_MANAGER_ALL_ACCESS = 0








创建服务事件
C/C++ code
nvo_systemserver lnvoboolean csrvstateconstant ulong SERVICE_ALL_ACCESS = 983551constant ulong SERVICE_WIN32_OWN_PROCESS = 16string lpServiceName //创建登记数据库中的关键字string lpDisplayName //服务名称ulong dwDesiredAccess //指定服务返回类型ulong dwServiceType //指定服务类型ulong dwStartType //指定启动类型 2表示自动运行 3表示手动运行 4表示禁止ulong dwErrorControl //指定服务启动失败的严重程度string lpBinaryPathName //指定服务程序二进制文件的路径string lpLoadOrderGroup //指定顺序装入的服务组名ulong lpdwTagId //忽略,NULLstring lpDependencies //指定服务帐号。如是NULL,则表示使用LocalSystem帐号 string lpstring lpPassword //指定对应的口令。为NULL表示无口令。但使用LocalSystem时填NULLstring ls_nulllpServiceName = "MyService"lpDisplayName = "测试服务"dwServiceType = 272dwStartType = 2dwErrorControl = 1lpBinaryPathName = ''lpLoadOrderGroup = '0'setnull(ls_null)csrvstate = lnvo.of_createservice(ref lpServiceName,ref lpDisplayName,SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS,dwStartType,dwErrorControl,ref lpBinaryPathName,ref lpLoadOrderGroup,ref lpdwTagId,ref lpDependencies,ref lp,ref lpPassword)if(csrvstate) then    messagebox("提示","成功创建" + lpServiceName + "服务!")else    messagebox("提示","创建服务失败!")end if



执行后没有返回错误,但是服务还是没有创建成功,哪里出了问题?



[解决办法]
探讨

引用:
这样试没用的,要创建成功很容易,但PB没办法直接支持回调函数,所以没办法直接返回结果给服务管理器,即使加进去了,启动,停止,之类的消息PB都无法接收到;
目前用PB的话只有通过PBNI去写个实现了回调函数功能的基类给pb来继承,原来有写过是可行的,当时参考的国外的例子,你搜搜看~~

那意思说白了就是pb压根就办不到是不?我是个新手,pbni不太了解,貌似这东西……

[解决办法]
string lpBinaryPathName //指定服务程序二进制文件的路径
string lpLoadOrderGroup //指定顺序装入的服务组名

参数都没有设置。。。服务上哪里去安装啊。。。


[解决办法]
把程序单步执行一下,如果用到回调函数,PB需要用pbni来实现,如果用pb11以上版本,可以用在程序中直接嵌套.net代码来实现
[解决办法]
PB.NET WinForm 应该可以直接使用 回调函数。。。

热点排行