Если мне не изменяет память, то в последних версиях служба не может создавать окна, соотв., таймер работать не будет. Как решение - создать дополнительный поток, который будет ждать нужного времени и запускать соотв. программу. Только надо сделать проверку, что бы не запускалось много копий. Например, по дате последнего запуска.
Что-то типа:
Код:
unit RunAppThread;
unterface
uses ...
type
TRunAppThread = class(TThread)
FLastRunDate : TDateTime;
procedure Execure; override
end;
implementation
procedure TRunAppThread.Execure;
begin
While Not Terminated Do
begin
if (FLastRunDate <> Date) And (HourOf(Time) = 23) And (MinuteOf(Time) = 20) Then
Begin
ShellExecute(...); // тут, возможно, придется делать через CreateProcess
FLastRunDate := Date;
End;
Sleep(15000); // Пауза в 15 секунд, можно сделать в 30 секунд
end;
end;