Проблема решилась следующим образом.
Код:
procedure TTestService.ServiceAfterInstall(Sender: TService);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('\SYSTEM\CurrentControlSet\Services\TestService', False);
Reg.WriteString('ImagePath', '"' + ParamStr(0) + '"');
finally
Reg.Free;
end;
end;
Связанно со следующим:
http://www.sources.ru/msdn/library/createservice.shtml
lpBinaryPathName
Указатель на строку (заканчивающуюся нулём), которая содержит полный путь к исполняемому файлу сервиса.
Если путь содержит пробелы, то он должен быть заключён в кавычки. Например, "d:\\my share\\myservice.exe" необходимо указать как
"\"d:\\my share\\myservice.exe\"".
Путь так же может содержать аргументы для автоматически-запускаемого сервиса. Например, "d:\\myshare\\myservice.exe arg1 arg2". Эти параметры передаются в точку входа сервиса (обычно в функцию main).
Судя по всему винда обновилась и по каким то причинам даже если в пути нет пробелов его надо заключать в двойные кавычки.
Теперь всё работает.