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


Автор: Djaconda 13.6.2008, 00:47
запускаю ShellExecute(0,nil,"game.exe",nil,nil,SW_SHOWNORMAL);
а как его потом удалить из памяти.

Автор: Данкинг 13.6.2008, 02:03
Цитата(Djaconda @  13.6.2008,  01:47 Найти цитируемый пост)
а как его потом удалить из памяти. 

Это вопрос, как я понимаю?
Поюзать ДРКБ или же поиск, обсуждалось недавно даже:
http://forum.vingrad.ru/topic-215631.html

Автор: Rennigth 15.6.2008, 00:39
Лучше создавать процесс через CreateProcess, а потом зная хендл открытого процесса закрывать его. Гуманнее и надежнее как-то smile

Автор: MetalFan 15.6.2008, 21:08
имхо закрывать процесс "снаружи" (типа TerminateProcess) без его ведома ниразу не гуманно.

Автор: skorpik 17.6.2008, 07:39
Цитата(Djaconda @ 13.6.2008,  00:47)
запускаю ShellExecute(0,nil,"game.exe",nil,nil,SW_SHOWNORMAL);
а как его потом удалить из памяти.

Хочу запустить в delphi bat-ник, который разархивирует порядка 50 файлов, а потом после того, как разархивируются все файлы, продолжить работать в программе. ТАк вот: не успевает bat-ник ве фйлы разархивировать, и поэтому в нужной директории не хватает файлов. Как быть? пробовал sleep, но на более медленных машинах не спасает и это. Как быть? Кто знает?

Автор: Rennigth 17.6.2008, 10:58
skorpik, CreateProcess + WaitForSingle(Multiple)Object. За подробностями в faq или поиск.

Автор: Akella 23.6.2008, 09:57
Код

function TfmMain.ExecAndWait(const FileName, Params: ShortString; ArcDir:string;
                               const WinState: Word): boolean; export;
var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: ShortString;
begin
  { Помещаем имя файла между кавычками, с соблюдением всех пробелов в именах Win9x }
  CmdLine := '"' + Filename + '" ' + Params;
  FillChar(StartInfo, SizeOf(StartInfo), #0);
  with StartInfo do begin
    cb := SizeOf(StartInfo);
    dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
    wShowWindow := WinState;
  end;//with
  try
    Result := CreateProcess(nil, PChar( String( CmdLine ) ), nil, nil, false,
                            CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
                            PChar(ArcDir),StartInfo,ProcInfo);
  except
    result := false;
  end;
  { Ожидаем завершения приложения }
  if Result then  begin
    WaitForSingleObject(ProcInfo.hProcess, INFINITE);
    { Free the Handles }
    CloseHandle(ProcInfo.hProcess);
    CloseHandle(ProcInfo.hThread);
  end;//if Result then  begin
end;



Код

                ExecAndWait(fmMain.sWinrar,
                                  'a -df -ep $'+fmMain.sFilialName+'_'+FormatDateTime('YYYYMMDD_HHNNSS_zzz',now)+' @'+fmMain.GetSystemPath(WinTemp)+'ToSend.List',
                                  fmMain.sOutFolder,
                                  0);



Код

       ExecAndWait(fmMain.sWinrar,
                          'M -ep -ed "'+sArcName+ '" "'+Dir+SearchRec.name+'"', sOutPhotoFolder,
                          0);

Автор: MetalFan 23.6.2008, 11:37
вот мне интересно, на кой Х плодить в ответах код из факов?! кстати местами не совсем корректный или просто бессмысленный...

Автор: Akella 25.6.2008, 07:19
Цитата(MetalFan @  23.6.2008,  11:37 Найти цитируемый пост)
кстати местами не совсем корректный или просто бессмысленный... 

у мну или в факах?
Подскажи, пожалуйста, что не так? По крайней мере этот код у мну работает давно и без глюков.

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