Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Удаленная отладка служб  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10771
Кто-то знает как приаттачится к удаленной службе?

Система: удаленная машина Windows 10. Запущен PAServer от Rio от имени администратора.

Пытаюсь из IDE выполнить Attach to process - и вижу только обычные процессы.

Чекбокс Show system process ни на что не влияет.

Пробовал запускать службу с локальной учетной записью - не помогает.

Раньше (в XE 3 и другой Windows) была проблема, что не передавались имена системных процессов, а только их PID. Сейчас нет ничего. Как я понимаю не хватает каких-то прав в Windows

С уважением, Vasilisk
6 мар 19, 21:39    [21826778]     Ответить | Цитировать Сообщить модератору
 Re: Удаленная отладка служб  [new]
rgreat
Member

Откуда:
Сообщений: 4826
На всякий случай: x64 и x86 не путаешь?
6 мар 19, 21:42    [21826781]     Ответить | Цитировать Сообщить модератору
 Re: Удаленная отладка служб  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10771
rgreat
На всякий случай: x64 и x86 не путаешь?
Нет. Отлаживаю 32 битную службу на 64 битной Windows

Если выбрать Win64 Debugger, то тоже видны только обычные процессы. Служб никаких нет
6 мар 19, 21:49    [21826785]     Ответить | Цитировать Сообщить модератору
 Re: Удаленная отладка служб  [new]
bk0010
Member

Откуда:
Сообщений: 4736
Запустите среду через "Запуск от имени администратора", со времен Vista то, что вы сидите под админом не значит, что у вас админские права.
6 мар 19, 21:55    [21826787]     Ответить | Цитировать Сообщить модератору
 Re: Удаленная отладка служб  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10771
bk0010
апустите среду через "Запуск от имени администратора"
Спасибо, кэп. Ничего, что студия запущена на другом компе и получает инфу об удаленной машине через сокет?
7 мар 19, 14:57    [21827395]     Ответить | Цитировать Сообщить модератору
 Re: Удаленная отладка служб  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10771
В общем написал службу, которая запускает PAServer. Сразу появились все процессы
+
unit UPASImpl;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses
  Vcl.SvcMgr;

type
  TPAServerLauncher = class(TService)
    procedure ServiceStart(Sender: TService; var AStarted: Boolean);
    procedure ServiceStop(Sender: TService; var Stopped: Boolean);
  private
    FProcHandle: THandle;
    FInWritePipe: THandle;
  public
    function GetServiceController: TServiceController; override;
  end;

var
  PAServerLauncher: TPAServerLauncher;

implementation

uses
  Winapi.Windows,
  System.SysUtils;

{$R *.dfm}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  PAServerLauncher.Controller(CtrlCode);
end;

function TPAServerLauncher.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;

procedure TPAServerLauncher.ServiceStart(Sender: TService;
  var AStarted: Boolean);
var
  LBasePath: string;
  LProcName: string;
  LInReadPipe: THandle;
  LSecAttr: TSecurityAttributes;
  LStartup: TStartupInfo;
  LProcInfo: TProcessInformation;
begin
  try
    LBasePath := ExtractFilePath(GetModuleName(HInstance));
    LProcName := LBasePath + 'PAServer.exe';

    LSecAttr.nLength := SizeOf(LSecAttr);
    LSecAttr.lpSecurityDescriptor := nil;
    LSecAttr.bInheritHandle := True;

    Win32Check(CreatePipe(LInReadPipe, FInWritePipe, @LSecAttr, 0));
    try
      Win32Check(SetHandleInformation(FInWritePipe, HANDLE_FLAG_INHERIT, 0));

      FillChar(LStartup, SizeOf(LStartup), 0);
      LStartup.cb := SizeOf(LStartup);
      LStartup.dwFlags := STARTF_USESTDHANDLES;
      LStartup.hStdInput := LInReadPipe;

      Win32Check(CreateProcess(
        PChar(LProcName),
        PChar(Format('"%s"', [LProcName])),
        nil,
        nil,
        True,
        0,
        nil,
        PChar(LBasePath),
        LStartup,
        LProcInfo
      ));
    finally
      CloseHandle(LInReadPipe);
    end;
    CloseHandle(LProcInfo.hThread);

    FProcHandle := LProcInfo.hProcess;
    AStarted := True;
  except
    on E: Exception do begin
      LogMessage(E.Message);
      AStarted := False;
      if FInWritePipe <> 0 then begin
        CloseHandle(FInWritePipe);
        FInWritePipe := 0;
      end;
    end;
  end;
end;

procedure TPAServerLauncher.ServiceStop(Sender: TService; var Stopped: Boolean);
const
  CExit: AnsiString = 'q' + sLineBreak;
var
  LWriteCnt: Cardinal;
begin
  if WaitForSingleObject(FProcHandle, 0) = WAIT_TIMEOUT then begin
    Win32Check(WriteFile(FInWritePipe, CExit[1], Length(CExit), LWriteCnt, nil));
    WaitForSingleObject(FProcHandle, INFINITE);
  end;
  CloseHandle(FProcHandle);
  CloseHandle(FInWritePipe);
end;

end.
7 мар 19, 18:45    [21827651]     Ответить | Цитировать Сообщить модератору
 Re: Удаленная отладка служб  [new]
rgreat
Member

Откуда:
Сообщений: 4826
Жаль что они сами не догадались сделать PAServer сервисом.
7 мар 19, 18:52    [21827656]     Ответить | Цитировать Сообщить модератору
 Re: Удаленная отладка служб  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10771
Вот ссылка на проект на гитхабе https://github.com/anton-shchyrov/PAServerLauncher
7 мар 19, 19:20    [21827672]     Ответить | Цитировать Сообщить модератору
 Re: Удаленная отладка служб  [new]
Arioch
Member

Откуда:
Сообщений: 10598
_Vasilisk_
В общем написал службу, которая запускает PAServer


а это писать надо?

srvany.exe была написана ещё в 2003, причём самим Майкрософтом

Впрочем и до 2003 года что-то было на NT Magazine, не помню что
7 мар 19, 20:42    [21827710]     Ответить | Цитировать Сообщить модератору
 Re: Удаленная отладка служб  [new]
Василий 2
Member

Откуда:
Сообщений: 433
nssm еще есть
11 мар 19, 10:24    [21828921]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить