powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ShellExecute: задержка выполнения программы до отработки внешней программы
74 сообщений из 74, показаны все 3 страниц
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898452
BorodaOleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообщем, нужно запустить на исполнение gbak, приостановить программу на период его исполнения, и дождавшись окончания процесса продолжить.
Запускаю так:

Код: pascal
1.
2.
3.
4.
5.
6.
        . . .
        strPackPath := 'gbak -b -g -v ' + StrFrom + ' ' + StrTo + ' -user SYSDBA -password masterkey';
        pac := PChar('/C ' + strPackPath);
        HINST := ShellExecute(0,'open','cmd.exe',pac, 'C:\Windows\system32\',SW_SHOW);   
        case HINST of
        . . .



при этом остановки не происходит, сразу же отрабатывается следующий по ходу оператор, и.т.д., а gbak крутится в другом окне. Как вообще возможно приостановить исполнение кода, пока крутится внешнее окно? Если его контролировать с помощью таймера, то вообще непонятно по какому handle к нему обратится...
Может кто что подскажет?
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898454
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898461
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почему именно ShellExecute?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898463
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BorodaOleg
Может кто что подскажет?

Если есть gbak, то проще api воспользоваться. Там немного больше контроля, чем за окошком следить.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898469
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.12.2019 11:06, wadman пишет:
> Если есть gbak, то проще api воспользоваться. Там немного больше
> контроля, чем за окошком следить.

api запускает процесс на СЕРВЕРЕ.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898496
sg729
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
https://www.gunsmoker.ru/2015/01/never-use-ShellExecute.html
https://www.gunsmoker.ru/2009/07/createprocess.html

// Ожидание завершение приложения
while WaitforSingleObject(... и т.д.)
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898573
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийapi запускает процесс на СЕРВЕРЕ.

И это получается гораздо быстрее. Хотя, конечно, в нынешней кривоватой реализации
локальный файл бэкапа и -v несовместимы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898580
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BorodaOleg
Вообщем, нужно запустить на исполнение gbak, приостановить программу на период его исполнения, и дождавшись окончания процесса продолжить.
Запускаю так:

Код: pascal
1.
2.
3.
4.
5.
6.
        . . .
        strPackPath := 'gbak -b -g -v ' + StrFrom + ' ' + StrTo + ' -user SYSDBA -password masterkey';
        pac := PChar('/C ' + strPackPath);
        HINST := ShellExecute(0,'open','cmd.exe',pac, 'C:\Windows\system32\',SW_SHOW);   
        case HINST of
        . . .




при этом остановки не происходит, сразу же отрабатывается следующий по ходу оператор, и.т.д., а gbak крутится в другом окне. Как вообще возможно приостановить исполнение кода, пока крутится внешнее окно? Если его контролировать с помощью таймера, то вообще непонятно по какому handle к нему обратится...
Может кто что подскажет?

Про *Ex уже написали.
А зачем cmd.exe запускать, почему не сразу gbak?
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898587
BorodaOleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем за помощь. ShellExecuteEx подошел по всем параметрам.
Вот решение, может кому ещё понадобится:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
//  strPackPath := 'gbak -b -g -v ' + StrFrom + ' ' + StrTo + ' -user SYSDBA -password masterkey';
//  fName:= PChar('/C ' + strPackPath);   // /C закрывать окно CMD после окончания процесса
                                                            // /K по окончании процесса окно не закрывать 

procedure TArchBaseCopy.ExecDosApp(fName: PChar);
var ShExecInfo  : TShellExecuteInfo;
    ExitCode    : DWORD;
begin
  FillChar(ShExecInfo, SizeOf(TShellExecuteInfo), 0);
  ShExecInfo.cbSize := sizeof(TShellExecuteInfo);
  ShExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
  ShExecInfo.Wnd := Handle;
  ShExecInfo.lpVerb := 'open';
  ShExecInfo.lpFile := 'cmd.exe';
  ShExecInfo.lpDirectory := 'C:\Windows\system32\';
  ShExecInfo.lpParameters := fName;
  ShExecInfo.nShow := SW_SHOW;
  if ShellExecuteEx(@ShExecInfo) and (ShExecInfo.hProcess <> 0) then
    repeat
    Application.ProcessMessages;
    GetExitCodeProcess(ShExecInfo.hProcess, ExitCode);
    until (ExitCode <> STILL_ACTIVE) or Application.Terminated
  else begin
    case ShExecInfo.hInstApp of
      0                      : SendEventBox(ET_RELEASE, 'Операционная успешна.');
      SE_ERR_FNF             : SendEventBox(ET_CRITICAL, 'Файл не найден');
      SE_ERR_PNF             : SendEventBox(ET_CRITICAL, 'Путь не найден');
      SE_ERR_ACCESSDENIED    : SendEventBox(ET_CRITICAL, 'Доступ к файлу запрещен');
      SE_ERR_OOM             : SendEventBox(ET_CRITICAL, 'He хватает памяти');
      SE_ERR_DLLNOTFOUND     : SendEventBox(ET_CRITICAL, 'He хватает памяти');
      SE_ERR_SHARE           : SendEventBox(ET_CRITICAL, 'Файл захвачен другим пользователем');
      SE_ERR_ASSOCINCOMPLETE : SendEventBox(ET_CRITICAL, 'Не полная информация о связанном с файлом приложении');
      SE_ERR_DDETIMEOUT      : SendEventBox(ET_CRITICAL, 'Истекло время на выполнение операции DDE');
      SE_ERR_DDEFAIL         : SendEventBox(ET_CRITICAL, 'Ошибочная операция DDE');
      SE_ERR_DDEBUSY         : SendEventBox(ET_CRITICAL, 'Операция DDE занята');
      SE_ERR_NOASSOC         : SendEventBox(ET_CRITICAL, 'Нет приложения, связанного с файлом');
      else SendEventBox(ET_RELEASE, 'Код ошибки не инициализирован: ' + IntToStr(ShExecInfo.hInstApp));
    end;
  end;
  CloseHandle(ShExecInfo.hProcess);
end;



Использовать Pipe и соответственно CreateProcess - не прокатило, так как совершенно непонятной мне причине в этом случае gbak не стартует где-то в 50% случаев, а иногда стартует, но не возвращает лог.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898590
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BorodaOleg,

автор
'Файл захвачен другим пользователем');

"всем оставаться на местах"

осторожнее... с такими сообщениями :)
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898591
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
решение - говно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898604
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот скажи - нахрена?
BorodaOleg
Код: pascal
1.
  ShExecInfo.lpFile := 'cmd.exe';

...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898605
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.12.2019 14:33, ёёёёё пишет:
> Ну вот скажи - нахрена?

я скажу.
тупая копи-паста первого попавшегося примера.
90% кода в интернете -
говно!

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898612
BorodaOleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sql2012
BorodaOleg,

автор'Файл захвачен другим пользователем');


"всем оставаться на местах"

осторожнее... с такими сообщениями :)


В описаловке так было, копировал не задумываясь
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898614
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.12.2019 14:45, BorodaOleg пишет:
> копировал не задумываясь

О!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898615
BorodaOleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий

05.12.2019 14:33, ёёёёё пишет:
> Ну вот скажи - нахрена?

я скажу.
тупая копи-паста первого попавшегося примера.
90% кода в интернете -
говно!



Не знаю, меня удовлетворило.
CMD выводит лог опроса, по окончании обработки окно закрывается, визуально видно что копия создана.

А насчёт код - говно!
Если он работает, и работает так как нужно, то почему он говно? Потому что тебя не устраивает?
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898618
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.12.2019 14:51, BorodaOleg пишет:
> А насчёт код - говно!
> Если он работает, и работает так как нужно, то почему он говно? Потому что тебя не устраивает?

воняет же!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898620
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BorodaOleg,

Есть множество граничных случаев. Как этот код поведет себя, если все эти случаи воспроизвести?
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898621
BorodaOleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий

05.12.2019 14:45, BorodaOleg пишет:
> копировал не задумываясь

О!


Не вырывайте текст из контекста уважаемый
Там было сказано - копировал текст описания ошибки не задумываясь,
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898625
BorodaOleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X-Cite
BorodaOleg,

Есть множество граничных случаев. Как этот код поведет себя, если все эти случаи воспроизвести?


Пока работает устойчиво, если полезут баги - буду думать что-то ещё.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898628
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.12.2019 14:55, BorodaOleg пишет:
> Пока работает устойчиво, если полезут баги - буду думать что-то ещё.

не будешь.
будешь искать очередное говно-решение.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898633
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BorodaOleg
CMD выводит лог опроса, по окончании обработки окно закрывается, визуально видно что копия создана.


1. Что за "лог опроса"?
2. А без cmd.exe - "окно не закрывается", "визуально не видно"?
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898648
Sinemurius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, может кому интересно, написал процедурку для вызова из консольной программы другой консольной команды.
При этом вывод вызываемой команды идет в основную консоль.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
procedure ConsoleExecute(const CommandLine: String);
type TBuffer = array[0..511] of byte;
var SA: TSecurityAttributes;
    SI: TStartupInfo;
    PI: TProcessInformation;
    StdOutPipeRead, StdOutPipeWrite: THandle;
    Result: Boolean;
    Buffer: TBuffer;
    BytesRead: Cardinal;
    vCmd: String;
    S,S2: AnsiString;
begin
  SA.nLength := SizeOf(SA);
  SA.bInheritHandle := True;
  SA.lpSecurityDescriptor := nil;

  CreatePipe(StdOutPipeRead,StdOutPipeWrite, @SA, 0);
  try
    FillChar(SI, SizeOf(SI), 0);
    SI.cb := SizeOf(SI);
    SI.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
    SI.wShowWindow := SW_HIDE;
    SI.hStdInput := GetStdHandle(STD_INPUT_HANDLE);
    SI.hStdOutput := StdOutPipeWrite;
    SI.hStdError := StdOutPipeWrite;

    vCmd := CommandLine;
    Result := CreateProcess(nil, PWideChar(vCmd), nil, nil, True, 0, nil, nil, SI, PI);
    CloseHandle(StdOutPipeWrite);
    if not Result then raise Exception.Create('Could not execute command line');
    try
      repeat
        Result := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil);
        if BytesRead > 0 then
        begin
          SetLength(S,BytesRead);
          move(Buffer[0],S[Low(S)],BytesRead);
          S2 := S;
          OemToAnsi(PAnsiChar(S),PAnsiChar(S2));
          Write(S2);
        end;
      until not Result or (BytesRead = 0);
      WaitForSingleObject(PI.hProcess, INFINITE);
    finally
      CloseHandle(PI.hThread);
      CloseHandle(PI.hProcess);
    end;
  finally
    CloseHandle(StdOutPipeRead);
  end;
end;
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898652
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.12.2019 15:17, Sinemurius пишет:
> вывод вызываемой команды идет в основную консоль.

зайчем? (С)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898654
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
05.12.2019 15:17, Sinemurius пишет:
> вывод вызываемой команды идет в основную консоль.

зайчем? (С)

"Потому что могу!"
[spoiler]
YouTube Video
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898658
Sinemurius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

Ну я же написал: может кому интересно.

Вот мне было нужно...

Кстати, легко переделать так, чтобы вывод шел куда нибудь в TMemo или еще куда при вызове из ГУИ-шной программы.

И да, мне показалось, что это по теме.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898661
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sinemurius
Вот мне было нужно...

Не расскажешь, для чего?
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898662
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.12.2019 15:26, Sinemurius пишет:
> Вот мне было нужно...

а для зачем?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898663
Sinemurius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для консольной программы, которая устанавливает библиотеку в IDE Delphi (для чего вызывает dcc32), устанавливает help для компонентов, перекомпилирует все исходники, демки и т.д.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898664
BorodaOleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ёёёёё
BorodaOleg
CMD выводит лог опроса, по окончании обработки окно закрывается, визуально видно что копия создана.


1. Что за "лог опроса"?
2. А без cmd.exe - "окно не закрывается", "визуально не видно"?


1. Лог опроса - имеется в виду, что gbak выдаёт на экран в процессе компрессии/декомпрессии
2. Без cmd.exe почему-то не находится gbak. Несмотря на то, что я даже этот самый gbak в корень скопировал и маршрут к нему прописал
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898665
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.12.2019 15:29, Sinemurius пишет:
> Для консольной программы, которая устанавливает библиотеку в IDE Delphi (для чего вызывает dcc32),
> устанавливает help для компонентов, перекомпилирует все исходники, демки и т.д.

щас придумал?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898676
BorodaOleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BorodaOleg
ёёёёё
пропущено...


1. Что за "лог опроса"?
2. А без cmd.exe - "окно не закрывается", "визуально не видно"?


1. Лог опроса - имеется в виду, что gbak выдаёт на экран в процессе компрессии/декомпрессии
2. Без cmd.exe почему-то не находится gbak. Несмотря на то, что я даже этот самый gbak в корень скопировал и маршрут к нему прописал
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898682
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BorodaOleg
ёёёёё
пропущено...


1. Что за "лог опроса"?
2. А без cmd.exe - "окно не закрывается", "визуально не видно"?


1. Лог опроса - имеется в виду, что gbak выдаёт на экран в процессе компрессии/декомпрессии
2. Без cmd.exe почему-то не находится gbak. Несмотря на то, что я даже этот самый gbak в корень скопировал и маршрут к нему прописал


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
function CreateAndWaitSubProcess(const ModuleFileName, CmdLine, CurrDir: string; ShowProcess: Boolean): Boolean;
var
  StartInfo: TStartUpInfo;
  ResultInfo: TProcessInformation;
  PCmdLine, PCurrDir: PChar;
begin
  GetStartupInfo(StartInfo);
  if not ShowProcess then begin
    StartInfo.dwFlags := STARTF_USESHOWWINDOW;
    StartInfo.wShowWindow := SW_HIDE;
  end;
  if CmdLine > '' then PCmdLine := PChar(AnsiQuotedStr(ModuleFileName, '"') + ' ' + CmdLine) else PCmdLine := nil;
  if CurrDir > '' then PCurrDir := PChar(CurrDir) else PCurrDir := nil;
  Result := CreateProcess(PChar(ModuleFileName), PCmdLine, nil, nil, False, NORMAL_PRIORITY_CLASS, nil, PCurrDir, StartInfo, ResultInfo);
  if Result then begin
    WaitForInputIdle(ResultInfo.hProcess, INFINITE); // ждем завершения инициализации
    WaitforSingleObject(ResultInfo.hProcess, INFINITE); // ждем завершения процесса
    //    GetExitCodeProcess(ResultInfo.hProcess, ExitCode); // получаем код завершения
    CloseHandle(ResultInfo.hThread); // закрываем дескриптор процесса
    CloseHandle(ResultInfo.hProcess); // закрываем дескриптор треда
  end;
end;
...

const
  cFNgbak = 'D:\Tools\FB\Servers\40\gbak.exe';
  cCmdStr = '-b "localhost/3104:D:\Tst40.fdb" "D:\Tst40.fbk" -user SYSDBA -pas masterkey -v';
begin
  if not CreateAndWaitSubProcess(cFNgbak, cCmdStr, '', true) then
    ShowMessageFmt('Фигня какая-то: %s', [SysErrorMessage(GetLastError)]);
end;
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898685
Sinemurius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

Нет. Это в входит в библиотеку: http://mraven.ru/files/Raven_Link_ver_1_7.zip

Но вообще, я в принципе люблю консольные программы.
Еще с того момента, когда я писал бухгалтерию на 580 ассемблере.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898686
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот это
CloseHandle(ResultInfo.hThread);
зачем?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898688
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
а вот это
CloseHandle(ResultInfo.hThread);
зачем?

Это артефакт, местные тараканы.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898689
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.12.2019 15:59, ёёёёё пишет:
>
> Это артефакт, местные тараканы.

оно кстати, кочует по интернетам из FAQа в FAQ...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898692
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
05.12.2019 15:59, ёёёёё пишет:
>
> Это артефакт, местные тараканы.

оно кстати, кочует по интернетам из FAQа в FAQ...

Ещё бы.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898693
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

у нас поддержка win98 совсем недавно прекратилась, там много таких странностей.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898694
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
а вот это
CloseHandle(ResultInfo.hThread);
зачем?
А что не так?
https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa Handles in PROCESS_INFORMATION must be closed with CloseHandle when they are no longer needed.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898696
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.12.2019 16:06, _Vasilisk_ пишет:
> А что не так?

а то, что ты закрываешь рукоятки дохлого процесса.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898704
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
05.12.2019 16:06, _Vasilisk_ пишет:
> А что не так?

а то, что ты закрываешь рукоятки дохлого процесса.

Сейчас вроде как уже пофиг, разве что мусор в системе остается: https://devblogs.microsoft.com/oldnewthing/?p=38363
А в старых виндах какая-то фигня была. Мы при завершении старательно освобождали все ресурсы.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898706
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
а то, что ты закрываешь рукоятки дохлого процесса.
И что? Хэндлы выделены нашему процессу и наш процесс должен их позакрывать. Время жизни хэндлов потока и процесса никак не связано с временем жизни объекта
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898713
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.12.2019 16:22, _Vasilisk_ пишет:
> Время жизни хэндлов потока и процесса никак не связано с временем жизни объекта

ты их не аллокировал. их отдала тебе винда.
при завершении процесса все егойные рукоятки освобождаютя.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898724
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поковырял msdn.
у них в примере тоже закрываются рукоятки.
https://docs.microsoft.com/ru-ru/windows/win32/procthread/creating-processes
ладно, пусть будет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898725
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
ты их не аллокировал. их отдала тебе винда.
при завершении процесса все егойные рукоятки освобождаютя.

Те, которые созданы (выделены, аллокированы) в том процессе.
А эти хендлы, в твоем процессе - будут жить, пока не закроется твой процесс, или до CloseHandle.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898727
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
05.12.2019 16:22, _Vasilisk_ пишет:
> Время жизни хэндлов потока и процесса никак не связано с временем жизни объекта

ты их не аллокировал. их отдала тебе винда.
при завершении процесса все егойные рукоятки освобождаютя.

Может быть, какие-то внутренние буфера, которыми ты формально владеешь в результате выполнения CreateProcess().
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898728
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.12.2019 16:41, YuRock пишет:
> А эти хендлы, в твоем процессе - будут жить, пока не закроется твой процесс

да, логично.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898741
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BorodaOleg
BorodaOleg
пропущено...


1. Лог опроса - имеется в виду, что gbak выдаёт на экран в процессе компрессии/декомпрессии
2. Без cmd.exe почему-то не находится gbak. Несмотря на то, что я даже этот самый gbak в корень скопировал и маршрут к нему прописал



А без консоли вывод слабо сделать?
незачот

МП, прости :)
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898745
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

переводить вывод консольных приложений в мемо(и т.п.) чревато искажениями. "Консолька" не всегда лишь просто печатает текст.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898754
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.12.2019 17:16, ёёёёё пишет:
> переводить вывод консольных приложений в мемо(и т.п.) чревато искажениями.
> "Консолька" не всегда лишь просто печатает текст.

gbak этим не страдает.
в отличие от dcc32
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898770
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
оно кстати, кочует по интернетам из FAQа в FAQ...
ёёёёё
Код: pascal
1.
2.
    CloseHandle(ResultInfo.hThread); // закрываем дескриптор процесса
    CloseHandle(ResultInfo.hProcess); // закрываем дескриптор треда


Эти комменты тоже так кочуют?
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898772
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger,

не, это совсем свежая лажа. А у меня там еще вместо бесконечного ожидания периодическая обработка событий, и еще древний косяк нашелся...
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898775
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, нет, это древнее зло: http://delphirus.com/article32.html
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898776
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sinemurius
Кстати, может кому интересно, написал процедурку для вызова из консольной программы другой консольной команды.
При этом вывод вызываемой команды идет в основную консоль.

Код: pascal
1.
2.
3.
...
          OemToAnsi(PAnsiChar(S),PAnsiChar(S2));
...


А если прога пишет не в oem, то вывод превратится в тыкву
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898795
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2
А если прога пишет не в oem, то вывод превратится в тыкву

Не знаю насчёт проги, но cmd.exe, собака, в консоль пишет в оем, даже если в скрипте есть команда 'chcp 1251' и вывод идёт в ANSI.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898816
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Не знаю насчёт проги, но cmd.exe, собака, в консоль пишет в оем, даже если в скрипте есть команда 'chcp 1251' и вывод идёт в ANSI.

Там, видимо, тоже прогеры такого типа были, вкорячили безусловный AnsiToOem )))

upd Проверил, всё нормально он пишет. chcp 1251 && cmd /? > outp дает правильную кодировку
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898876
a-gulia69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
const
  ShowCommands: array[TExecState] of Integer = (SW_SHOWNORMAL, SW_MINIMIZE, SW_SHOWMAXIMIZED, SW_HIDE);

function FileExecuteWait(const FileName, Params, StartDir: string; InitialState: TExecState): Integer;
var
  Info: TShellExecuteInfo;
  ExitCode: DWORD;
begin
  FillChar(Info, SizeOf(Info), 0);
  Info.cbSize := SizeOf(TShellExecuteInfo);
  with Info do 
  begin
    fMask := SEE_MASK_NOCLOSEPROCESS;
    Wnd := HInstance;
    lpFile := PChar(FileName);
    lpParameters := PChar(Params);
    lpDirectory := PChar(StartDir);
    nShow := ShowCommands[InitialState];
  end;
  if ShellExecuteEx(@Info) then
  begin
    repeat
      ProcessMessages;
      GetExitCodeProcess(Info.hProcess, ExitCode);
    until (ExitCode <> STILL_ACTIVE);

    Result := ExitCode;
  end
  else
    Result := -1;
end;
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898880
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2
upd Проверил, всё нормально он пишет. chcp 1251 && cmd /? > outp дает правильную кодировку

Я через программное перенаправление вывода брал, хотя может уже забыл чего за давностью, но точно помню что OemToAnsi() вызывать приходилось.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898897
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a-gulia69
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
const
  ShowCommands: array[TExecState] of Integer = (SW_SHOWNORMAL, SW_MINIMIZE, SW_SHOWMAXIMIZED, SW_HIDE);

function FileExecuteWait(const FileName, Params, StartDir: string; InitialState: TExecState): Integer;
var
  Info: TShellExecuteInfo;
  ExitCode: DWORD;
begin
  FillChar(Info, SizeOf(Info), 0);
  Info.cbSize := SizeOf(TShellExecuteInfo);
  with Info do 
  begin
    fMask := SEE_MASK_NOCLOSEPROCESS;
    Wnd := HInstance;
    lpFile := PChar(FileName);
    lpParameters := PChar(Params);
    lpDirectory := PChar(StartDir);
    nShow := ShowCommands[InitialState];
  end;
  if ShellExecuteEx(@Info) then
  begin
    repeat
      ProcessMessages;
      GetExitCodeProcess(Info.hProcess, ExitCode);
    until (ExitCode <> STILL_ACTIVE);

    Result := ExitCode;
  end
  else
    Result := -1;
end;

Ад
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898970
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Я через программное перенаправление вывода брал, хотя может уже забыл чего за давностью, но точно помню что OemToAnsi() вызывать приходилось.

Есть вероятность, что chcp влияет только на вывод в консоль
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39899491
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рекомендую вместо интернета чаще в жедаевские либы заглядывать. большинство распространенных проблем там уже решены и достаточно качественно:
https://github.com/Makhaon/jcl/blob/4199a5554797359974e48c4abd825a2250980971/jcl/source/windows/JclMiscel.pas#L210
https://github.com/Makhaon/jcl/blob/4199a5554797359974e48c4abd825a2250980971/jcl/source/windows/JclMiscel.pas#L236
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39899610
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon
Рекомендую вместо интернета чаще в жедаевские либы заглядывать. большинство распространенных проблем там уже решены и достаточно качественно:
https://github.com/Makhaon/jcl/blob/4199a5554797359974e48c4abd825a2250980971/jcl/source/windows/JclMiscel.pas#L210
https://github.com/Makhaon/jcl/blob/4199a5554797359974e48c4abd825a2250980971/jcl/source/windows/JclMiscel.pas#L236

Код: pascal
1.
2.
3.
uses
  ...
  JclResources, JclSecurity, JclStrings, JclSysUtils, JclSysInfo;


Вот за это я не люблю JCL/JVCL. Добавляешь юнит ради 1-2 процедур или компонентов, получаешь +2-3 мегабайта к экзешнику в нагрузку.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39899630
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

можно же аккуратненько выкусить нужное.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39899820
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё
alekcvp,
можно же аккуратненько выкусить нужное.


Ну так о том и речь, что проще свою сделать, чем тянуть этот чемодан.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39899876
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
09.12.2019 10:46, alekcvp пишет:
>
> Ну так о том и речь, что проще свою сделать, чем тянуть этот чемодан.

да ну его нафиг, он же без ручки!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39899956
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
ёёёёё
alekcvp,
можно же аккуратненько выкусить нужное.


Ну так о том и речь, что проще свою сделать, чем тянуть этот чемодан.

Нужная функция вполне автономна, к тому же она
1) уже готова
2) вероятно, протестирована
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39899970
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
09.12.2019 13:44, Василий 2 пишет:
>
> Нужная функция вполне автономна, к тому же она
> 1) уже готова
> 2) вероятно, протестирована

а нахрена там WaitForInputIdle(... INFINITE ) перед WaitForSingleObject() ?
и почему результат WaitForSingleObject() проверяется на WAIT_OBJECT_0 а не на WAIT_FAILED ?

ы?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39900687
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий

а нахрена там WaitForInputIdle(... INFINITE ) перед WaitForSingleObject() ?
и почему результат WaitForSingleObject() проверяется на WAIT_OBJECT_0 а не на WAIT_FAILED ?

WaitForInputIdle тут лишний - возможно, копипаст или наследие давних времен.

Ну а WaitForSingleObject просто запускают, и только в случае успешного завершения с WAIT_OBJECT_0 возвращают код выхода процесса. В остальных случаях просто проваливаются ниже (а что еще делать, если Wait вернула FAILED?)
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39900710
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10.12.2019 11:29, Василий 2 пишет:
>
> Ну а WaitForSingleObject просто запускают, и только в случае успешного завершения с WAIT_OBJECT_0 возвращают код выхода процесса.

не совсем так.
WaitForSingleObject не только к процессам применяется - там и мьютексы, и таймеры, и семафоры и т.д.
https://docs.microsoft.com/ru-ru/windows/win32/sync/using-mutex-objects
по хорошему, нужно делать CASE на результат вызова.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39900742
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий

не совсем так.
WaitForSingleObject не только к процессам применяется - там и мьютексы, и таймеры, и семафоры и т.д.
https://docs.microsoft.com/ru-ru/windows/win32/sync/using-mutex-objects
по хорошему, нужно делать CASE на результат вызова.

*чешу в затылке*
А это ты к чему вообще? Тут же вызывают для хэндла процесса. И какие варианты возврата вообще могут быть?
WAIT_ABANDONED - не применимо, судя по описанию (только для мутексов)
WAIT_OBJECT_0 - ОК, штатно завершился. Получить exit code
WAIT_TIMEOUT - таймаут, но в данном случае не возникнет, т.к. infinite
WAIT_FAILED - а тут вообще хз, что случилось. Лучшее, что можно сделать, это закрыть хэндлы.
Да и в остальных случаях, кроме штатного завершения, это единственная мера.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39900746
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10.12.2019 12:22, Василий 2 пишет:
> WAIT_FAILED - а тут вообще хз, что случилось.

вот в этом случае как раз имеет смысл таки "спросить"
GetLastError, что ж там такое произошло.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39900828
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий

вот в этом случае как раз имеет смысл таки "спросить"
GetLastError, что ж там такое произошло.

Согласен, но тут уж функция так сделана, если получили отлуп - так и получили. По-хорошему, если уж им не хотелось кидать исключение, то надо получать lasterror и устанавливать его после CloseHandle (т.к. она обнуляет lasterror)
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39900847
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, пожалуй это оптимальный вариант
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
74 сообщений из 74, показаны все 3 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ShellExecute: задержка выполнения программы до отработки внешней программы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]