- Почему Билл Гейтс избегает интимных отношений с юзерами?
- Потому, что данное действие может быть квалифицировано, как незаконная попытка взять деньги дважды за, собственно говоря, однажды уже оказанный сервис.
unit Unit1;
interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Winsvc;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure StopService(ServiceName: string);
procedure Button2Click(Sender: TObject);
procedure StartService(ServiceName: string);
private{ Private declarations }public{ Public declarations }end;
var
Form1: TForm1;
implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
begin
StopService(Edit1.Text);
end;
procedure TForm1.StopService(ServiceName: string);
var
schService,
schSCManager: DWORD;
p: PChar;
ss: _SERVICE_STATUS;
begin
p := nil;
schSCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if schSCManager = 0 then
RaiseLastWin32Error;
try
schService := OpenService(schSCManager, PChar(ServiceName),
SERVICE_ALL_ACCESS);
if schService = 0 then
RaiseLastWin32Error;
tryifnot ControlService(schService, SERVICE_CONTROL_STOP, SS) then
RaiseLastWin32Error;
finally
CloseServiceHandle(schService);
end;
finally
CloseServiceHandle(schSCManager);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
StartService(Edit1.Text);
end;
procedure TForm1.StartService(ServiceName: string);
var
schService,
schSCManager: Dword;
p: PChar;
begin
p := nil;
schSCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if schSCManager = 0 then
RaiseLastWin32Error;
try
schService := OpenService(schSCManager, PChar(ServiceName),
SERVICE_ALL_ACCESS);
if schService = 0 then
RaiseLastWin32Error;
tryifnot Winsvc.startService(schService, 0, p) then
RaiseLastWin32Error;
finally
CloseServiceHandle(schService);
end;
finally
CloseServiceHandle(schSCManager);
end;
end;
end.
Программа на Delphi для запуска и остановки Windows-сервисов!
Программа создает простой графический интерфейс с двумя кнопками: "Остановить сервис" и "Запустить сервис". Пользователь может ввести имя сервиса, который он хочет остановить или запустить, в текстовом поле. Когда кнопка нажата, соответствующая процедура вызывается.
Вот разбивка кода:
Form1.dfm: Это файл содержит визуальную схему формы, включая ее компоненты (например, метки, кнопки и текстовое поле).
Unit1.pas: Это файл содержит реализацию процедур формы.
Процедура StopService открывает управляющий процесс сервисов, находит сервис с указанным именем и отправляет команду остановки. Если операция успешна, сервис будет остановлен.
Процедура StartService делает аналогичные шаги, но отправляет команду запуска вместо остановки.
Обратите внимание, что это программное обеспечение использует Windows API (WinSvc) для взаимодействия с сервисами. Функции OpenSCManager, OpenService, ControlService и CloseServiceHandle используются для управления сервисами.
Вот альтернативное решение, используя встроенный компонент Delphi TServiceController:
Создайте новую форму и добавьте две кнопки: "Остановить сервис" и "Запустить сервис". Добавьте текстовое поле, где пользователь может ввести имя сервиса.
В событии OnCreate формы создайте новый экземпляр TServiceController и установите свойство ServiceName в значение из текстового поля. Затем настройте клики кнопок следующим образом:
Для кнопки "Остановить сервис": ServiceController.Stop();
Для кнопки "Запустить сервис": ServiceController.Start();
Эта APPROACH проще и более удобна, чем использовать Windows API напрямую.
Что касается комментария Билла Гейтса о близких отношениях с пользователями... я думаю, это шутка!
Руководство по остановке и запуску сервисов в Windows с помощью программы на Delphi, которая использует API-интерфейс для управления сервисами.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.