用InstallShield注册一个Windows系统服务
用过打包软件的朋友都知道我们在制作安装包的时候经常需要往windows系统里面注册一些服务,以方便管理。用Advanced Installer的话就太简单了,直接在向导里面填入服务名称和描述之类的就可以自动实现的,但是用installshield的朋友都知道installshield是没有这个向导,那么我们就只能通过代码来实现了。
一个windows服务的信息:
1.注册的服务名称:也就是我们在任务管理器里面看到的进程名称
2.服务的显示名称:就是我们在服务管理器上面看到
3.服务的描述信息:这个就不用说了(可有可无)
4.服务调用的程序路径:这个服务运行那个程序
5.服务器的启动类型:是否自动,还是手动,或者是禁用
有了上面这些信息我们就可以开始着手写代码了
function OnFirstUIAfter()
STRING szServiceName, szServiceDisplayName, szServiceDescription, szServicePathFile, szStartServiceArgs;
NUMBER ,bStartService,
begin
ShowObjWizardPages(NEXT);
szServiceName=”hiadmin”;
//注册的服务名称
szServiceDisplayName=”阳光网志”;
//服务显示名称
szServiceDescription=”阳光网志,个人博客而已”;
//服务描述
szServicePathFile=TARGETDIR^”\\Server\\test.exe”;
//程序文件的路径,安装路径下的Server目录下的test.exe文件
bStartService=0;
//启动类型为自动
szStartServiceArgs=”";
ServiceAddService ( szServiceName, szServiceDisplayName, szServiceDescription, szServicePathFile, bStartService, szStartServiceArgs );
ServiceStartService(szServiceName,”");
//在最后加了一行代码,当程序安装完成后启动这个服务
@XZB24
不用客气,探讨技术问题对从事技术行业的人来说是一种很好的交流的方式,大家能一起进步!
[回复]
检查了,是程序自身的问题,安装程序没问题,再次谢谢你
[回复]
@XZB24
如果是程序在安装完成了并且能够自动的运行,那么安装包所做的注册服务的功能基本上是没有问题的,剩下需要检查的重点放在程序上面,你可以通过其他的方式来运行这个程序来检查是否是程序软件本身的问题?
[回复]
还有我调试ServiceAddService 的时候,调用这个函数返回的结果都是 < ISERR_SUCCESS ,也就意味着这个函数调用是失败了,但服务却是注册成功了
[回复]
谢谢你这么快就回复我了
现在找的问题是服务可以自动运行,但运行了一会就关掉了,查看了一些事件查看器,里面说的是服务的连接超时,就返回一个找不到文件的错误,服务就关掉了,请问这个是什么原因呢?
[回复]
@XZB24
如果是您说的情况,在机器重启后注册的服务没有自动运行,
那么您可以打开服务管理器查看您注册的服务的状态,是否是开机自动运行的
如果要开机自动运行,请将:bStartService=0;即可
[回复]
我照你的方法试了,但我安装的服务在开机后并没有运行,是不是还要怎么设置ServiceAddService 的参数才行,我把bStartService设置为TRUE之后,开机初服务运行了一下就又自动关掉了,请问是什么问题,我想让这个服务一开机就一直在运行,有什么办法呢?
[回复]
呵呵~来傻笑一下!闪了!
[回复]
@kevinyang
技术上面的东西可以给我留言,大家可以探讨下
[回复]
看了你的文章,想向你请教一下关于installshield方面的东西,怎么联系你了?
[回复]