要在 Delphi 中操作 Windows 功绩,不错使用 TServiceManager 组件。以下是一个示例,展示如何开启、关闭、重启和查询 Windows 功绩:
uses
System.SysUtils, System.Classes, Winapi.Windows, Winapi.Messages, Vcl.SvcMgr;
procedure StartService(const AServiceName: string);
var
ServiceManager: TServiceManager;
Service: TService;
begin
ServiceManager := TServiceManager.Create(nil);
try
ServiceManager.Connect;
Service := ServiceManager.Services[AServiceName];
if Assigned(Service) then
begin
if Service.Status <> TServiceStatus.Running then
begin
Service.Start;
Service.WaitForStatus(TServiceStatus.Running, 5000); // 最多恭候 5 秒钟
if Service.Status <> TServiceStatus.Running then
raise Exception.Create('启动功绩失败');
end
else
raise Exception.Create('功绩也曾在开动');
end
else
raise Exception.Create('找不到指定的功绩');
finally
ServiceManager.Free;
end;
end;
procedure StopService(const AServiceName: string);
var
ServiceManager: TServiceManager;
Service: TService;
begin
ServiceManager := TServiceManager.Create(nil);
try
ServiceManager.Connect;
Service := ServiceManager.Services[AServiceName];
if Assigned(Service) then
begin
if Service.Status <> TServiceStatus.Stopped then
begin
Service.Stop;
Service.WaitForStatus(TServiceStatus.Stopped,首页-和西乌机场有限公司 5000); // 最多恭候 5 秒钟
if Service.Status <> TServiceStatus.Stopped then
raise Exception.Create('罢手功绩失败');
end
else
raise Exception.Create('功绩也曾罢手');
end
else
raise Exception.Create('找不到指定的功绩');
finally
ServiceManager.Free;
end;
end;
procedure RestartService(const AServiceName: string);
begin
StopService(AServiceName);
StartService(AServiceName);
end;
function QueryServiceStatus(const AServiceName: string): TServiceStatus;
var
ServiceManager: TServiceManager;
Service: TService;
begin
ServiceManager := TServiceManager.Create(nil);
try
ServiceManager.Connect;
Service := ServiceManager.Services[AServiceName];
if Assigned(Service) then
Result := Service.Status
else
raise Exception.Create('找不到指定的功绩');
finally
ServiceManager.Free;
end;
end;
// 示例用法
begin
try
StartService('MyService'); // 启动指定的功绩
Writeln('功绩已启动');
// 恭候一段时辰, 首页-汉盛乌有限公司然后罢手功绩
Sleep(5000);
StopService('MyService');
Writeln('功绩已罢手');
// 恭候一段时辰, 佛山市顺德区德朗电器制造有限公司然后重启功绩
Sleep(5000);
RestartService('MyService');
Writeln('功绩已重启');
// 查询功绩情景
Writeln('功绩现时情景: ', QueryServiceStatus('MyService'));
except
on E: Exception do
Writeln('操处事迹失败: ' + E.Message);
end;
Write('按 Enter 键退出...');
Readln;
end.
在上头的示例中,纺织加工咱们使用 TServiceManager 组件来统一到功绩死心科罚器,并通过 Services 属性得到特定的功绩。然后,咱们不错使用 Start 、 Stop 和 WaitForStatus 设施来启动、罢手和恭候功绩情景的变化。 QueryServiceStatus 函数用于查询功绩确现时情景。
请防卫,上述示例中的 MyService 是一个占位符功绩名,你需要将其替换为你要操作的现实功绩的称呼。此外纺织加工,确保在扩充操作时处理可能的相配情况,并证实需要进行谬妄处理或输出合适的信息。
本站仅提供存储功绩,扫数内容均由用户发布,如发现存害或侵权内容,请点击举报。