怎么才让软件一运行就自动安装服务?安装成功不会弹出 Service installed successfully 窗口. ( 积分: 200 )

  • 主题发起人 主题发起人 山沟穷女生念不起大学
  • 开始时间 开始时间

山沟穷女生念不起大学

Unregistered / Unconfirmed
GUEST, unregistred user!
我刚学习安装系统服务
下面是我看了网上文章后学习写的代码:

Project1.dpr
////////////////////////////////////////////////////////////
program Project1;

uses
SvcMgr,
Unit1 in 'Unit1.pas' {Service1: TService};

{$R *.RES}

begin
Peizhi.WinServerView := 'Delphi服务演示程序';
Peizhi.WinServerName := 'DelphiService';
SvcMgr.Application.Initialize;
Service1 := TService1.CreateNew(SvcMgr.Application,0);
SvcMgr.Application.Run;
end.



Unit1.pas
/////////////////////////////////////////////////////////////////

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs;
type
SerInfo = record
Regqidong: Boolean;
WinXpSer: Boolean;
WinServerView:String;
WinServerName:String;
WinServerText:String;
end;

type
TService1 = class(TService)
protected
procedure Start(Sender: TService; var Started: Boolean);
procedure Stop(Sender: TService; var Stopped: Boolean);
public
function GetServiceController: TServiceController; override;
constructor CreateNew(AOwner: TComponent; Dummy: Integer = 0); override;
end;

var
Service1: TService1;
Peizhi: SerInfo;
implementation

{$R *.DFM}

constructor TService1.CreateNew(AOwner: TComponent; Dummy: Integer);
begin
inherited;
AllowPause := False;
Interactive := True;
DisplayName := Peizhi.WinServerView;
Name := Peizhi.WinServerName;
OnStart := Start;
OnStop := Stop;
end;

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
Service1.Controller(CtrlCode);
end;

function TService1.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;

procedure TService1.Start(Sender: TService; var Started: Boolean);
begin
Started := True;
end;

procedure TService1.Stop(Sender: TService; var Stopped: Boolean);
begin
Stopped := True;
end;

end.

我想请各位老师,帮我完善:
1.怎么才能够让软件一运行就自动安装服务?我是在命令行中输入Project1.exe /install /silent的,这样很麻烦,我想让软件运行的时候自己安装.
2.安装成功不会弹出 Service installed successfully 窗口.
3.如果已经安装系统服务了,第二次开机软件会自动识别,就不用再安装了.
4.如何处理不同的系统 98 2000 XP 2003等等

十分感谢!
 
呵呵,顺便跟你学了回服务程序的编写
随手解决你的问题
注册的问题仍然是用批处理,不过是用winexec来调用的
WinExec('Project1.exe /install /silent');
重复性检测问题,我解决了再告诉你
 
先谢谢icc
WinExec('Project1.exe /install /silent');
好象不是最好的做法
 
调用系统服务管理API,具体查看MSDN
 
先写一个普通程序,功能就是释放服务程序,并注册服务。如果运行时检查到服务程序已经被释放,退出。
然后把服务程序打包到这个普通程序的后面。
系统重启后,就会自动启动服务了,而这个普通程序也就不会再被运行。
如果你想做的更干净一点,可以这样:
1。运行普通程序
2。把运行中的普通程序移动到临时目录
3。把服务程序释放在原普通程序的目录下,并创建为和普通程序同名文件
4。普查程序对释放出的服务程序进行注册
5。把一个删除信息写入注册表,系统下次启动时自动删除临时目录下的文件
这样,一个普通程序就悄悄的变脸为一个服务程序了。
 
你把主单元代码贴出来,就能告诉你怎么解决。
 
谢谢Rainstorey 我的电脑烂 已经没有空间装MSDN 而且我的英文依赖于金山的...
非常谢谢ufo! 我正仔细琢磨您的建议
谢谢kaida 我主要是练习 主单元就在上面 我想求热心老师替我完善
 
是不是想写木马之类的东西哦。
 
http://www.delphibbs.com/keylife/iblog_show.asp?xid=8101
这篇笔记里有安装,卸载以及管理服务的代码示例
 
后退
顶部