Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.06;
Скачать: CL | DM;

Вниз

CreateProcess и “DOS архиватор”.   Найти похожие ветки 

 
xGrey ©   (2003-01-17 11:51) [0]

Уважаемые мастера! Помогите советом.

Создаю процесс ф-цией CreateProcess в котором запускается “DOS архиватор”. Процесс автоматически завершается после закрытия окна архиватора.
Жду окончание работы процесса ф-цией WaitforSingleObject.

Проблема в следующем: в Win9x для архиватора должен существовать *.pif файл, в котором хранится информация о том, что нужно "закрывать окно после завершения работы". Иначе процесс не завершается и приложение вешается.
Можно ли избавиться от *.pif файла, передав входным параметрам ф-ции CreateProcess соответствующие данные?


 
DOOMin   (2003-01-17 12:42) [1]

А что за архиватор? Не легче ли найти компоненты, которые будут паковать в этот формат без запуска стороннего приложения? Практически для всех распространенных архиваторов таковые имеются www.torry.net


 
xGrey ©   (2003-01-17 13:03) [2]

to DOOMin
ARJ 2.71
IMHO, эта проблема будет с любым "поддосовым" архиватором в Win9x.
Исп. чего-то стороннего не хочется, т. к. уже написан и работает соотв. класс.
Тем более что передовая в pCommandLine (CreateProcess) путь к архиватору + ключи, можно работать пр. с любым архиватором.
Меня смущает только одно: пользователь, сняв галку в св-вах *.pif "закрывать окно после завершения работы", может подвесить мое приложение...


 
AKu   (2003-01-17 13:35) [3]

У меня пару дней назад возникла такая же проблема, которую нужно было срчно решить. Я применил очень тупой метод: запустил архиватор (у меня - HA.exe) CreateProcess c параметром SW_ShowMinimized, а потом

var p:TProcessInfo;
...
while WaitForSingleObject(p.hProcess,100)=WAIT_OBJECT_0 do
if FindWindow(nil,"(Сеанс завершен) - HA")<>0 then TerminateProcess(p.hProcess);

Для моих целей такого кода оказалось вполне достаточно, но интересно узнать, как же это можно сделать по-человечески.


 
xGrey ©   (2003-01-17 14:13) [4]

to AKu
Вариант, конечно :)

Правда, теряется универсальность:
-для каждого исп. архиватора нужно хранить константы с соотв. надписями;
-надпись будет зависеть от локализации OS и от типа OS (9x / NT), возможно и от локальных настроек пользователя.
+ доп. расход ресурсов на сканирование окна каждые 100 миллисекунд.

IMHO, с *.pif все же лучше....


 
AKu   (2003-01-17 15:16) [5]

Кстати, может быть попробовать запускать не сам архиватор, а BAT-файл вида:

arj %1
exit


 
AKu   (2003-01-17 16:28) [6]

Я тут подумал, наверное лучше всего перенаправить вывод архиватора в другое место, заменив hStdOut в StartupInfo, тогда он не будет использовать окно консоли. Пример смотри в программе TDosMemo на этом сайте.
А по поводу моего раннего способа могу сказать, что я над ним раньше не раздумывал, мне срочно нужно было перепаковать несколько сотен файлов и я не заботился об изящности способа.


 
xGrey ©   (2003-01-17 17:52) [7]

То AKu:
Спасибо, посмотрю.



Страницы: 1 вся ветка

Текущий архив: 2003.03.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
3-16966
line
2003-02-17 01:15
2003.03.06
Установка пароля на существующую таблицу Paradox


14-17294
Demon
2003-02-19 15:45
2003.03.06
Архиваторы


3-16964
Alik
2003-02-14 11:37
2003.03.06
Прокрутка StringGrid


14-17268
Димаска
2003-02-19 01:24
2003.03.06
Вопрос про свич


14-17336
Maximator Vetera
2003-02-12 10:23
2003.03.06
Димедрол.