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

Откуда:
Сообщений: 43
Доброго дня! Коллеги, подскажите пожалуйста.
Использую CreateProcess для запуска и надо получить ProcID процесса, который запущу.
Есть код, который работает на XE3, но сейчас надо на Delphi7 это сделать.

сам код:

var
  StartUpInfo: TStartUpInfo;
  ProcessInfo: TProcessInformation;
  sa: TSecurityAttributes;
  Arguments, exepath, reason : String;
  startOK: boolean;

  ProcID: Cardinal;
  appPath: string;
begin
  appPath:= ExtractFilePath(application.ExeName);

  Arguments :='\myproc.exe param1;
  exepath:= appPath+ '\myproc.exe';

      with sa do
      begin
        nLength := SizeOf(sa);
        bInheritHandle := true;
        lpSecurityDescriptor := nil;
      end;

      FillChar(startupInfo, SizeOf(startupInfo), 0);
      startupInfo.cb := SizeOf(startupInfo);
      startupInfo.dwFlags := STARTF_USESHOWWINDOW;
      startupInfo.wShowWindow := SW_HIDE; //SW_SHOWNORMAL;
      startupInfo.lpDesktop := nil;

      try
        if CreateProcess(
          nil,
          PChar(exepath),
          @SA, @SA, false, NORMAL_PRIORITY_CLASS,
          nil,
          PChar(appPath),
          StartUpInfo, ProcessInfo) then
        begin
          ProcID:= ProcessInfo.dwProcessId;
          startOK:= true;
        end
        else
          Reason:= SysErrorMessage(GetLastError);


И на D7 уже на стадии компиляции видно, что в код ProcID:= ProcessInfo.dwProcessId; никогда не зайдет.
В код else - зайдет и выполнит. А строка где получение ProcID - нет. Собственно под отладчиком так и получается.
Процесс при этом запускается успешно.

Подскажите, что тут неправильно делаю? Благодарю!
20 май 20, 14:31    [22136386]     Ответить | Цитировать Сообщить модератору
 Re: Получить dwProcessId в CreateProcess в Delphi 7  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 4389
SilverShield,

Попробуй отключить оптимизацию для этого модуля:
{$OPTIMIZATION OFF}
20 май 20, 14:36    [22136390]     Ответить | Цитировать Сообщить модератору
 Re: Получить dwProcessId в CreateProcess в Delphi 7  [new]
SilverShield
Member

Откуда:
Сообщений: 43
Kazantsev Alexey, да, помогло! Благодарю!
20 май 20, 15:04    [22136406]     Ответить | Цитировать Сообщить модератору
 Re: Получить dwProcessId в CreateProcess в Delphi 7  [new]
misha mike
Member

Откуда:
Сообщений: 687
Како-то это странно. ProcID далее где-то используется? Ни разу не видел, чтобы оптимизатор выбрасывал используемый код, он же даже пустые циклы не выбрасывает.
20 май 20, 16:10    [22136482]     Ответить | Цитировать Сообщить модератору
 Re: Получить dwProcessId в CreateProcess в Delphi 7  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 4389
misha mike,

В семёрке оптимизатор с багами. Я нарывался пару раз, тут тоже недавно всплывало.
20 май 20, 16:36    [22136505]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить