Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > заглушить exception дочернего процесса


Автор: namervasek 3.5.2012, 13:28
Вообщем этом можно сказать продолжение этой темы http://forum.vingrad.ru/forum/topic-351230.html
Только проблема теперь в том чтобы не дать exception дочернего процесса не вылазил на экран при возникновении.
Поскажите как это можно реализовать.

Автор: namervasek 3.5.2012, 13:58
Эх.. с названием и первым постом я маленько переборщил...
Вообщем нужно реализовать, что типо "silent" установки с регистрацией комовского сервера

Автор: bems 3.5.2012, 22:29
regsvr32.exe /s

Автор: northener 3.5.2012, 23:37
Цитата(namervasek @  3.5.2012,  13:28 Найти цитируемый пост)
Только проблема теперь в том чтобы не дать exception дочернего процесса не вылазил на экран при возникновении.


Цитата(namervasek @  3.5.2012,  13:58 Найти цитируемый пост)
Эх.. с названием и первым постом я маленько переборщил...

А вы уверены, что переборщили?

Автор: namervasek 4.5.2012, 14:45
Цитата(northener @ 3.5.2012,  23:37)
А вы уверены, что переборщили?

Ну если возможен вариант что процесс грохнется без exception, то нет

Цитата
regsvr32.exe /s

У меня EXE

Вообщем сам нашел приемлемое решение  с помошью SetErrorMode
вот участок кода кому интересно
Код


      FillChar(SI, SizeOf(SI), 0);
      SI.cb := SizeOf(SI);
      ChildExitCode := MAXDWORD;
      OldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS or SEM_NOGPFAULTERRORBOX);

      RegOK := CreateProcess(PChar('project1.Exe'), PChar('project1.Exe' + ' 2000 /regserver -e'),
                             nil, nil, false, 0, nil, nil, SI, PI);
      if RegOK then
      begin
        WaitForSingleObject(PI.hProcess, INFINITE);
        SetErrorMode(OldErrorMode);
        GetExitCodeProcess(PI.hProcess, ChildExitCode);
        RegOK := ChildExitCode = 0;
        
      if RegOK then
        Writeln('Ok')
      else
        Writeln('Err')

    finally
      CloseHandle(PI.hThread);
      CloseHandle(PI.hProcess);
    end;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)