用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,””);

//在最后加了一行代码,当程序安装完成后启动这个服务

《用InstallShield注册一个Windows系统服务》有10个想法

  1. 我照你的方法试了,但我安装的服务在开机后并没有运行,是不是还要怎么设置ServiceAddService 的参数才行,我把bStartService设置为TRUE之后,开机初服务运行了一下就又自动关掉了,请问是什么问题,我想让这个服务一开机就一直在运行,有什么办法呢?

  2. @XZB24
    如果是您说的情况,在机器重启后注册的服务没有自动运行,
    那么您可以打开服务管理器查看您注册的服务的状态,是否是开机自动运行的
    如果要开机自动运行,请将:bStartService=0;即可

  3. 谢谢你这么快就回复我了
    现在找的问题是服务可以自动运行,但运行了一会就关掉了,查看了一些事件查看器,里面说的是服务的连接超时,就返回一个找不到文件的错误,服务就关掉了,请问这个是什么原因呢?

  4. 还有我调试ServiceAddService 的时候,调用这个函数返回的结果都是 < ISERR_SUCCESS ,也就意味着这个函数调用是失败了,但服务却是注册成功了

  5. @XZB24
    如果是程序在安装完成了并且能够自动的运行,那么安装包所做的注册服务的功能基本上是没有问题的,剩下需要检查的重点放在程序上面,你可以通过其他的方式来运行这个程序来检查是否是程序软件本身的问题?

发表评论

电子邮件地址不会被公开。 必填项已用*标注