Доброе время суток
Помогите пожалуйста разобраться где ошибка.
Задача: Программа должна уметь переключать на компьютере адрес шлюза в нужное время. Причем
работать она должна как служба (желательно системная) под Вин ХР и не взаимодействовать с
рабочим столом юзера. Получать запрос на изменение должна по сети из другого компа по TCP
соединению. Для этих целей использовался вызов команды route
const
UserName : WideString = 'ADMIN';
Password : WideString = '123456';
Title : WideString = 'change process';
Domain : WideString = '.';
var
ConstCommandLine : String;
MyStartupInfo : STARTUPINFO;
ProcessInfo : PROCESS_INFORMATION;
CommandLine : array[0..512] of WideChar;
begin
ConstCommandLine:= 'route -f add 0.0.0.0 MASK 0.0.0.0 192.168.0.1 METRIC 20 IF
'+iface;//iface- переменная разная для разных компов
FillChar(MyStartupInfo, SizeOf(MyStartupInfo), 0);
MyStartupInfo.cb := SizeOf(MyStartupInfo);
StringToWideChar(ConstCommandLine, CommandLine,
Sizeof(CommandLine) div SizeOf(WideChar));
MyStartupInfo.lpTitle := PWideChar(Title);
if not CreateProcessWithLogonW (PWideChar(UserName), PWideChar(Domain),
PWideChar(Password), LOGON_WITH_PROFILE, nil,
CommandLine, 0, nil, nil, @MyStartupInfo, @ProcessInfo) then
begin
RaiseLastWin32Error()
end
else begin
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
// отправка клиенту сообщения об успешном изменении шлюза
idTCPClient.Port:=StrToInt(EditPort.Text);
idTCPClient.Host:=EditAddress.Text;
idTCPClient.Connect;
idTCPClient.WriteLn(GetComputerNetName+'.'+EditMessage.Text);
idTCPClient.Disconnect;
end;
end;
Далее для запуска проги как службы я использовал инструкции приведенные на
http://corsaro.nnov.ru/trash/zametki-o-windows-xp/848798.htmlРезультат работы:
1)Под виндовс ХР SP1 все работает ОК
2)Под виндовс ХР SP2 и ХР SP3 прога работает только если она запущена как обычное
приложение. Если запустить ее как службу под системной учетной записью то ничего не
происходит. Прога получает запрос от клиента но не меняет шлюза. Если запускать прогу как
службу с учетной записью admin то при первом запросе прога меняет ip шлюза но при
последующих попытках она выдает "route.exe Ошибка при инициализации приложения 0xc0000142".
Если сделать перезапуск службы то опять первый раз все сработает а последующие выдаст приведенную ошибку.