不用cmd用delphi如何实现启动停止windows服务
建议参考一下Delphi的ScktSrvr原码, 
$(DELPHI)\Source\Vcl\ScktSrvr.dpr 
--------------------------------------------------------------------------------
windows 系统服务
--------------------------------------------------------------------------------
function StartService(AServName: string): Boolean; //use WinSvc
var
SCManager, hService: SC_HANDLE;
lpServiceArgVectors: PChar;
begin
SCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
Result := SCManager <> 0;
if Result then
try
hService := OpenService(SCManager, PChar(AServName), SERVICE_ALL_ACCESS);
Result := hService <> 0;
if (hService = 0) and (GetLastError = ERROR_SERVICE_DOES_NOT_EXIST) then
Exception.Create('The specified service does not exist');
if hService <> 0 then
try
lpServiceArgVectors := nil;
Result := WinSvc.StartService(hService, 0, PChar(lpServiceArgVectors));
if not Result and (GetLastError = ERROR_SERVICE_ALREADY_RUNNING) then
Result := True;
finally
CloseServiceHandle(hService);
end;
finally
CloseServiceHandle(SCManager);
end;
end;
function StopService(AServName: string): Boolean;
var
SCManager, hService: SC_HANDLE;
SvcStatus: TServiceStatus;
begin
SCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
Result := SCManager <> 0;
if Result then
try
hService := OpenService(SCManager, PChar(AServName), SERVICE_ALL_ACCESS);
Result := hService <> 0;
if Result then
try  //停止并卸载服务;
Result := ControlService(hService, SERVICE_CONTROL_STOP, SvcStatus);
//删除服务,这一句可以不要;
//      DeleteService(hService);
finally
CloseServiceHandle(hService);
end;
finally
CloseServiceHandle(SCManager);
end;
end;
/
//////////////////////////////////////////////////////////////////////////////////
总不能让用户自己启动吧?将其安装为NT服务似乎也不是很好的办法,我想最好就是将它绑定到应用服务器了,请问各位,我该如何做呢?一定送分!
---------------------------------------------------------------
up
---------------------------------------------------------------
可以将你的App Server加到ScktSrvr那个程序中,或ScktSrvr加到你的程序中,那个程序在VCL目录下,不管怎么,第一次还是得安装成NT服务,不然它自动会加?
---------------------------------------------------------------
up
---------------------------------------------------------------
把Scktsrvr加到启动程序中(我就是这样做的);
---------------------------------------------------------------
同意楼上的说法,我也是这样做的!
---------------------------------------------------------------
up
----------------------------------------------------
-----------
把Scktsrvr加到启动程序中
---------------------------------------------------------------
把它加启动程序中?不好吧。
该程序是NT服务型的,只要运行一次,以后就自动运行了。所以没有必要让它加到启动组中每次再运行一次。
可以试试以下两种方法:
1.在发布应用服务器时,把Scktsrvr一同发布,在应用服务器执行的开始,先执行Scktsrvr,第一次执行后,在注册表中写一个标志,表示Scktsrvr已经运行。以后再运行时首先检查这个标志,如已运行就不再执行了。
2.在安装盘中做呀。制作安装盘的工具大多都有执行外壳命令的功能。安装应用服务器后让安装程序执行一下Scktsrvr就可以了!
---------------------------------------------------------------
up
---------------------------------------------------------------
帮你up一下!
---------------------------------------------------------------
<加到启动程序中
---------------------------------------------------------------
在Delphi的安装目录下的\Source\Vcl目录下有ScktSrvr.dpr整个项目,你可以将的应用程序服务器加在这个项目里,就不用ScktSrvr.Exe了。
---------------------------------------------------------------
Scktsrvr是个服务
< -install 
注册这个服务,并在服务管理器把它设为自动就OK了。
---------------------------------------------------------------
把Scktsrvr加到启动程序中
---------------------------------------------------------------
to : Jiemi(Jiemi) 
你是怎样连的?出什么错?
我就是这样做的,在ScktSrvr.dqr项目里,加入远程数据模块,将服务器要用的控件都放到远程数据模块中,编译执行。
然后打开客户端程序,连接,成功!!没什么问题也!!!!
---------------------------------------------------------------
先启动你的Scktsrvr;
delphi app可以再应用程序启动后,调用外部程序;
---------------------------------------------------------------
MIDAS 是三层的结构。客户端---中间层(应用服务器)---数据库服务器
它的做用主要在中间层。
C/S ,这种结构主要把程序作在客户端,
而三层在中间层。
好处:利于扩展,可以支持B/S, 维护方便。
还有负载平衡能力和容错能力,不至于一台服务器出错,
就不能工作或丢失数据。
---------------------------------------------------------------
上面的发错了,
SORRY!
---------------------------------------------------------------
up
---------------------------------------------------------------
from mota骆la
那就只执行一次喽
将Scktsrvr放入:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
----------------------------
-----------------------------------
楼上的这些注意还不错
---------------------------------------------------------------
我帮你UP
---------------------------------------------------------------
在dpr中
procedure RunSckt;
var
handle: hwnd;
begin
if FindWindow(nil, 'scktsrvr') = 0 then
ShellExecute(handle, 'open', pchar(ame) + ''), '', '', SW_SHOWNA);
end;
在主form中
procedure TfrmMain.FormDestroy(Sender: TObject);
var
HandleSocket: Hwnd;
begin
HandleSocket := FindWindow(nil, 'scktsrvr');
if HandleSocket <> 0 then
SendMessage(handlesocket, wm_close, 0, 0);
end;
---------------------------------------------------------------
第一 scktsrvr /install 安装到服务器中最好,因为在98下面启动是不行的,只有在2k下面或者NT下面才行;
第二 scktsrvr整个工程源代码在VCL下面,可以改变名称,和里面的数据模块,可以改个名称;
第三 通讯端口可以改变,最好改变,这个端口写在注册表里面,看看源代码就可以拉,最好改变不要使用注册表来放置,这样便于保密。
---------------------------------------------------------------
好帖子,我也正在考虑这个问题
---------------------------------------------------------------
我倒,早就有过这种讨论了,scktsrvr demo 中 TSocketDispatcher 可以独立成一个控件,那样你爱放
哪就哪了?
现在的问题是 TSocketDispatcher 不能检测到非法网络中断,比方客户机掉电/拔号断开连接/线路不稳定
---------------------------------------------------------------
╮╮ 
\█/ 
●  我倒!
太可怕,你是不是这样倒的?
Zzzzz~~~~~~
---------------------------------------------------------------
让它随server自动启动。(放到启动菜单)
---------------------------------------------------------------
uuuuuuupppppp
---------

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。