求一个让程序以服务方式启动的引用单元?

hjkto 2009-09-28 05:50:54
如题?
...全文
236 61 打赏 收藏 转发到动态 举报
写回复
用AI写文章
61 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjkto 2009-10-10
  • 打赏
  • 举报
回复
最近忙,今天结帖了,分很少,得不到,不好意思了。
hjkto 2009-10-04
  • 打赏
  • 举报
回复
这是把程序自身建立为服务启动
对,这就是我想在代码中加入的代码
晚上我试试看。
sanguomi 2009-10-04
  • 打赏
  • 举报
回复
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, WinSvc, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function InstallService(SvcName, SvcDispName, SvcFullPath: string): integer;
var
hSCM, hService: SC_HANDLE;
sInfo: string;
begin
// 这里要填注册表信息,要不不会自动启动,因为我那个单元封装了,所以没贴上来
result := 0;
hSCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if hSCM = 0 then
begin
result := GetLastError;
exit;
end;
try
hService := CreateService(hSCM,
PChar(SvcName),
PChar(SvcDispName),
SERVICE_ALL_ACCESS, //SERVICE_START OR SERVICE_QUERY_STATUS OR _DELETE,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_DEMAND_START, //SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL,
PChar(SvcFullPath),
nil, nil, nil, nil, nil);

if hService = 0 then
begin
result := GetLastError;
case result of
ERROR_ACCESS_DENIED: sInfo := 'ERROR_ACCESS_DENIED';
ERROR_CIRCULAR_DEPENDENCY: sInfo := 'ERROR_CIRCULAR_DEPENDENCY';
ERROR_DUPLICATE_SERVICE_NAME: sInfo := 'ERROR_DUPLICATE_SERVICE_NAME';
ERROR_INVALID_HANDLE: sInfo := 'ERROR_INVALID_HANDLE';
ERROR_INVALID_NAME: sInfo := 'ERROR_INVALID_NAME';
ERROR_INVALID_PARAMETER: sInfo := 'ERROR_INVALID_PARAMETER';
ERROR_INVALID_SERVICE_ACCOUNT: sInfo := 'ERROR_INVALID_SERVICE_ACCOUNT';
ERROR_SERVICE_EXISTS: sInfo := 'ERROR_SERVICE_EXISTS';
end;
end
else
CloseServiceHandle(hService);
finally
CloseServiceHandle(hSCM);
end;
// 这里也要填注册表信息
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
InstallService('Test', 'Test1', Application.ExeName);
end;

end.



这样就自动建立了一个服务了
sanguomi 2009-10-04
  • 打赏
  • 举报
回复
就几个API 先在注册表把值填上 OpenSCManager, CreateService 再填一次注册表
建立的服务就自动启动了
我这里有代码 我不想贴,不想被公司的人看见,不好意思
sanguomi 2009-10-04
  • 打赏
  • 举报
回复
晕死,还没解决?
fyqxdy 2009-10-04
  • 打赏
  • 举报
回复
哪位大虾会易语言,会的加我Q:237587943
hjkto 2009-10-04
  • 打赏
  • 举报
回复
回一个,十分到手。
hjkto 2009-10-03
  • 打赏
  • 举报
回复
[Quote=引用 50 楼 yktd26 的回复:]
把你service窗的
interactive := true
[/Quote]

这个我做过了,可还是没有出现窗体,窗体没有,控件没地方放呀?
hjkto 2009-10-03
  • 打赏
  • 举报
回复
[Quote=引用 52 楼 ibican 的回复:]
那就是你的服务没做好  做好了肯定能出来

请参考scktsrvr的源码
[/Quote]

你所说的源码,我没有找到
我就是按照月亮的方法做出来的服务,怎么就没有窗体呢?

最好,谁能给我一个代码例 子?
ibican 2009-10-03
  • 打赏
  • 举报
回复
那就是你的服务没做好 做好了肯定能出来

请参考scktsrvr的源码
tangbin88 2009-10-02
  • 打赏
  • 举报
回复
晕,有点乱,关注
ibican 2009-10-02
  • 打赏
  • 举报
回复
完全可以 服务设成交互式的就有界面了

从网上找服务实例 删掉里面没用的东西,再把你的代码填到这个框架里
yktd26 2009-10-02
  • 打赏
  • 举报
回复
把你service窗的
interactive := true
hjkto 2009-10-02
  • 打赏
  • 举报
回复
[Quote=引用 43 楼 yktd26 的回复:]
新建一个service projet
只是把你原程序.dpr
里做的大概在ServiceExecute事件里做一遍不行么
[/Quote]

我对服务不熟悉,,另外, 我的程序中,用到第三方控件还有窗体,这些
能在服务中加载吗?
hjkto 2009-10-02
  • 打赏
  • 举报
回复
弄了一下 ,没有弄好交互
问一下,怎么把服务程序设成交互
谁能给一个例子看看?
yktd26 2009-10-02
  • 打赏
  • 举报
回复
[Quote=引用 47 楼 hjkto 的回复:]
引用 45 楼 ibican 的回复:
完全可以  服务设成交互式的就有界面了

从网上找服务实例  删掉里面没用的东西,再把你的代码填到这个框架里


设成交互后,能用第三方控件吗?
[/Quote]

没有什么影响吧

hjkto 2009-10-02
  • 打赏
  • 举报
回复
[Quote=引用 45 楼 ibican 的回复:]
完全可以  服务设成交互式的就有界面了

从网上找服务实例  删掉里面没用的东西,再把你的代码填到这个框架里
[/Quote]

设成交互后,能用第三方控件吗?
yktd26 2009-10-01
  • 打赏
  • 举报
回复
新建一个service projet
只是把你原程序.dpr
里做的大概在ServiceExecute事件里做一遍不行么
znj_326 2009-09-30
  • 打赏
  • 举报
回复
很简单的,只需要加几句代码就OK,

你可以参考scktsrvr.exe,有源码的
hjkto 2009-09-29
  • 打赏
  • 举报
回复
顶起
加载更多回复(40)

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧