Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2008, 20:26   #1
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию Ожидание окончания вызванного процесса

Вобщем мне необходимо какимто образом дождаться звершения вызванного процесса, и следом запустить ещё один....
если не понятно выразился:
есть 2 утилиты декодировки... сначала файл раскодируется одной программой, затем раскодированный файл ещё раз раскодируется другой... если я вызываю 2 раза WiinExec, то первая утилита неуспевает раскодировать, а вторая уже запускается... естественно, вторая ничего не находит, и выдаёт ошибку...

Пробовал реализовывать примеры, которые запускают процесс через CreateProcess, и затем ждут окончания через WaitForSingleObject

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

вот примерный код(в том виде как я его вызываю):
PHP код:
Procedure Decode_SS;
var
  
siTStartupInfo;
  
piTProcessInformation;
begin
  FillChar
(siSizeOf(si),1);
  
si.cb := SizeOf(si);
  
FillChar(piSizeOf(pi),1);
  if 
CreateProcess('l2encdec.exe''-s SystemMsg-e.dat'nilnil,false,0,nil,nil,si,pi)  then
       begin
          WaitForSingleObject
(pi.hProcessINFINITE);
          
CloseHandle(pi.hProcess);
          
CloseHandle(pi.hThread);
       
end
  
else
  
begin
    MessageDlg
(SysErrorMessage(GetLastError), mtError, [mbOK], 0);
  
end;
end
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 16.07.2008, 20:53   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Причина 1. Почему структуры заполняются единицами, а не нулями?
Причина 2. В CreateProcess нужно передавать полный путь к исполняемому файлу, иначе система будет искать его в текущем каталоге.
B_N вне форума Ответить с цитированием
Старый 16.07.2008, 21:00   #3
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

mg:
почествовал себя нубом) не обратил внимания, что единицами заполняю, помогло)
полный путь какраз не нужен, декодер лежит в папке с моей программой

ЗЫ: вопрос теперь другой, как не дать закрыться вызываемому консольному приложению? дело в том, что параметры пытаюсь передать верные, но декодер не раскодирует файл, а ошибку прочитать естественно неуспеваю...

И ещё, как запустить этот процесс скрытым (как SW_HIDE в WinExec)
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}

Последний раз редактировалось Johnson; 16.07.2008 в 21:04.
Johnson вне форума Ответить с цитированием
Старый 16.07.2008, 21:06   #4
Ring0Sn
Форумчанин
 
Аватар для Ring0Sn
 
Регистрация: 06.09.2007
Сообщений: 239
По умолчанию

На будещее такие веши делай через ZeroMemory и не придеться потом такие лажовые ошибки ловить
Ring0Sn вне форума Ответить с цитированием
Старый 16.07.2008, 21:11   #5
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Ring0Sn, покажешь как?
ЗЫ вопрос про отменение закрытия остаётся в силе
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 16.07.2008, 21:13   #6
Ring0Sn
Форумчанин
 
Аватар для Ring0Sn
 
Регистрация: 06.09.2007
Сообщений: 239
По умолчанию

Что тут показывать то
Код:
Windows.pas:
procedure ZeroMemory(Destination: Pointer; Length: DWORD);
begin
  FillChar(Destination^, Length, 0);
end;
Ring0Sn вне форума Ответить с цитированием
Старый 16.07.2008, 21:23   #7
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Сори, ступил, вопрос отменяется) неправильно вызвал процесс)
делал так:
Код:
if CreateProcess(эl2encdec.exeэ , '-s SystemMsg-e.dat', nil, nil,false,0,nil,nil,si,pi)  then
а нужно было так:
Код:
if CreateProcess(nil, 'l2encdec.exe -s SystemMsg-e.dat', nil, nil,false,0,nil,nil,si,pi)  then
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 16.07.2008, 21:30   #8
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Остается вопрос: как вызвать процесс невидимым? например также как это делает WinExec с параметром SW_HIDE
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 16.07.2008, 21:44   #9
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Johnson Посмотреть сообщение
Остается вопрос: как вызвать процесс невидимым? например также как это делает WinExec с параметром SW_HIDE
STARTUPINFO Structure
Смотрите в сторону wShowWindow.
B_N вне форума Ответить с цитированием
Старый 16.07.2008, 22:12   #10
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Хм... а нельзя в данном случае обойтись батником типа
Цитата:
@echo off
echo Working...
echo ======================== >>log.txt
date /T >>log.txt
call ping.exe mail.ru >>log.txt (первая программа)
call ping.exe 127.0.0.1 >>log.txt (вторая программа)
echo Done. See log.txt for details
pause
?
пыщь
JTG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка окончания загрузки страницы в WebBrowser Vladimir K. Работа с сетью в Delphi 8 31.10.2010 19:20
Кэш процесса Explorer.exe Air Общие вопросы Delphi 16 21.03.2008 13:51
удаление символа окончания строки Xozer SQL, базы данных 1 07.02.2008 12:19
ID процесса ben95 Общие вопросы Delphi 1 22.01.2008 19:43
Скрытие процесса komex Безопасность, Шифрование 11 18.12.2006 23:04