Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.04.2013, 03:13
speles speles вне форума
Прохожий
 
Регистрация: 14.01.2011
Сообщения: 2
Репутация: 10
По умолчанию Проблема с CreateProcess

Здравствуйте!
Для запуска чужого приложения использую такую функцию:
Код:
procedure ExecApp(CommandLine: string);
 var
  sa : TSECURITYATTRIBUTES;
  si : TSTARTUPINFO;
  pi : TPROCESSINFORMATION;
begin
  sa.nLength := sizeof(sa);
  sa.bInheritHandle := False;
  sa.lpSecurityDescriptor := nil;
  ZeroMemory(@si, SizeOf(si));
  ZeroMemory(@pi, SizeOf(pi));
  si.cb := SizeOf(si);
  si.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
  si.wShowWindow := SW_SHOW;
  si.hStdInput := 0;
  si.hStdOutput := 0;
  si.hStdError := 0;
  CreateProcessW(nil, pchar(CommandLine), nil, nil, False,  NORMAL_PRIORITY_CLASS, nil, nil, si, pi);
end;
Дочерние приложения запускаются. Но, когда я закрываю свое приложение, дочерние приложение также закрывается. Как сделать чтобы оно продолжало работать?

UPD: Сам разобрался случайно. Такое поведение только когда запускаю приложение из Delphi. Когда запускаю отдельно - все ОК. >_<

Последний раз редактировалось speles, 02.04.2013 в 03:21.
Ответить с цитированием
  #2  
Старый 02.04.2013, 08:22
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от speles
Такое поведение только когда запускаю приложение из Delphi. Когда запускаю отдельно - все ОК. >_<
неправда:
Код:
var
  StartupInfo: TStartupInfo;
  ProcessInformation: TProcessInformation;
begin
  ZeroMemory(@StartupInfo, SizeOf(TStartupInfo));
  StartupInfo.cb:=SizeOf(TStartupInfo);
  StartupInfo.dwFlags:=STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow:=SW_SHOWNORMAL;
  if CreateProcess(nil, 'c:\WINDOWS\system32\calc.exe', nil, nil, False, 0,
    nil, nil, StartupInfo, ProcessInformation) then
  begin
    CloseHandle(ProcessInformation.hThread);
    CloseHandle(ProcessInformation.hProcess);
  end;
end;
все прекрасно работает и из под Delphi.

и зачем флаг STARTF_USESTDHANDLES ???
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
speles (02.04.2013)
  #3  
Старый 02.04.2013, 19:09
speles speles вне форума
Прохожий
 
Регистрация: 14.01.2011
Сообщения: 2
Репутация: 10
По умолчанию

Кажется, мне нужно больше спать.
Всё действительно работает, просто процес который я запускал закрывался изза неверных входных данных.
Спасибо за помощь.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:57.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter