При разработке приложений на Delphi 2010 часто возникает потребность в автоматическом выполнении определённых процедур при старте операционной системы Windows, независимо от запуска программ. В данной статье мы рассмотрим, как можно реализовать такой функционал, не изменяя при этом реестр системы, что может быть важно с точки зрения безопасности и удобства установки.
Варианты решения
Существует несколько подходов к решению данной задачи, и все они требуют прав администратора. Рассмотрим наиболее популярные из них:
Создание сервиса, который будет запускаться автоматически при старте системы до входа любого пользователя.
Добавление записи в реестрHKLM\Software\Microsoft\Windows\CurrentVersion\Run, что выполнит процедуру при входе интерактивного пользователя.
Создание запланированной задачи с соответствующим триггером, например, "При старте".
Пример кода сервиса на Object Pascal
Для создания сервиса можно использовать следующий пример кода на Object Pascal, который будет запускаться в фоновом режиме при старте системы:
program WinService;
{$APPTYPE CONSOLE}
uses
Servers,
Classes,
SysUtils;
// Сервисный объект
TMyService = class(TService)
public
procedure Execute(ASrv: TService; var ATerminated: Boolean);
end;
// Конструктор сервиса
constructor CreateService;
begin
with TService.Create(ParamStr(0), TMyService) do
try
Name := 'MyService';
DisplayName := 'My Service';
Description := 'This service runs a procedure on system startup';
StartType := stAutoStart;
StartParams.SecureStart := ssLocalSystem;
if not Install then
raise Exception.Create('The service failed to install');
finally
Free;
end;
end;
{ TMyService }
procedure TMyService.Execute(ASrv: TService; var ATerminated: Boolean);
begin
// Здесь разместите код процедуры, которая должна быть выполнена при старте системы
// Например, можно написать цикл, который будет выполняться до остановки сервиса
while not ATerminated do
begin
Sleep(5000); // Задержка в 5 секунд
// Ваш код
end;
end;
begin
CreateService;
ServiceManager.RunServices;
end.
Запуск процедуры с использованием запланированной задачи
Для создания запланированной задачи, которая будет запускать вашу процедуру при старте системы, можно передать аргумент в командной строке, который будет указывать, что задача запущена при старте системы:
program StartupProcedure;
uses
Classes,
SysUtils;
function IsStartup: Boolean;
begin
Result := CommandLineParams[0] = 'Startup'; // Проверяем, передан ли аргумент 'Startup'
end;
procedure PerformStartupProcedure;
begin
// Здесь разместите код процедуры, которую нужно выполнить при старте системы
if IsStartup then
begin
// Ваш код для выполнения при старте системы
end;
end;
begin
PerformStartupProcedure;
end.
После этого, создайте задачу в планировщике задач Windows, указав соответствующий триггер "При старте" и передайте в качестве аргумента командной строки значение 'Startup'.
Заключение
В данной статье мы рассмотрели, как можно автоматически запускать процедуры в Delphi 2010 на Windows без изменения реестра, создавая сервисы или запланированные задачи. Приведённые примеры кода помогут вам реализовать необходимый функционал. Выбирайте подход, который лучше всего подходит под ваши требования и условия работы приложения.
Автоматический запуск процедуры в Delphi 2010 на Windows без внесения изменений в реестр достигается через создание сервиса или запланированных задач.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS