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

Вниз

Передача управления другой программе без возврата   Найти похожие ветки 

 
vertal ©   (2004-06-28 14:01) [0]

Можно ли передать управление другой программе без возврата в вызывающую? Иными словами , нужна функция вроде CreateProcess , но запускающая процесс после закрытия основной программы , откуда этот CreateProcess был вызван.


 
Игорь Шевченко ©   (2004-06-28 14:05) [1]


> нужна функция вроде CreateProcess , но запускающая процесс
> после закрытия основной программы , откуда этот CreateProcess
> был вызван.


А смысл ? Запусти CreateProcess, закрой свою программу. Процесс останется.


 
panov ©   (2004-06-28 14:06) [2]

А если после вызова просто закончить вызывающую программу?


 
vertal ©   (2004-06-28 17:56) [3]

Не спорю , обычно можно просто вызвать CreateProcess и закончить программу.Но я пишу деинсталлятор и хочу в конце убить папку , где находится программа.Это можно сделать через команду
rd /s /q ProgramPath
, но запускать ее надо после завершения основной программы , иначе ее файл не может быть удален.


 
Игорь Шевченко ©   (2004-06-28 17:57) [4]

vertal ©   (28.06.04 17:56)

В запущенной подожди, пока вызывающая не завершиться, передай ей ID процесса, в ней же получи по этому ID Handle процесса, жди его завершения и выполняй нужную команду. Проблема на пустом месте.


 
SammIk ©   (2004-06-28 18:14) [5]

Экстирмальныи способ, внедрить в чужои процесс(эксплорер)
свои код, которыи после завершения твоего процесса, грохнет
папку.
Лучше тем, что после деинсталяции ничего не останится.


 
Тимохов ©   (2004-06-28 18:37) [6]

Вопрос-дополнение, т.е. не новый вопрос :))


> Игорь Шевченко ©   (28.06.04 17:57) [4]

А можно сделать так:
1. В вызывающем процессе сделать openprocess для себя, т.е. получить handle на себя
2. при этом openprocess сдеать inheritable.
3. открыть другой процесс
4. передать в него уже handle?

Или тут какие нибудь подводные камни?


 
MBo ©   (2004-06-28 18:46) [7]

>Тимохов ©   (28.06.04 18:37) [6]
цель какая?


 
Тимохов ©   (2004-06-28 19:03) [8]


> MBo ©   (28.06.04 18:46) [7]

Игорь сказал путь, я спросил можно ли сделать чуть иначе, но со схожей семантикой. Т.е. просто интересно. :)


 
vertal ©   (2004-06-28 23:38) [9]

> В запущенной подожди, пока вызывающая не завершиться, передай ей ID процесса...
Я же хочу запустить не другую свою программу , а просто команду
для command(cmd) - rd и все.Какие тут хэндлы?
После деинсталляции у меня и сейчас обычно ничего не остается , но это реализовано через запуск через CreateProcess bat - файла примерно следующего содержания:

:del
del AppName
if EXIST AppName GoTo DEl
del ...
rd ...
del Self.bat

Этот вариант не позволяет обрабатывать ошибки , и вообще , выглядит крайне криво.Если бы описываемая функция была , то можно было бы хотя бы обойтись без временного bat - файла.
Видимо , действительно только через внедрение в чужой процесс , но что-то не хочется на этом заморачиваться - тогда оставлю как есть.


 
Игорь Шевченко ©   (2004-06-28 23:44) [10]


> А можно сделать так:
> 1. В вызывающем процессе сделать openprocess для себя, т.е.
> получить handle на себя
> 2. при этом openprocess сдеать inheritable.
> 3. открыть другой процесс
> 4. передать в него уже handle?
>
> Или тут какие нибудь подводные камни?


Практика - критерий истины. Попробуй - узнаешь. Может быть, и можно, я противопоказаний не вижу. Единственное, в CreateProcess надо указать InheritHandles


 
Cobalt ©   (2004-06-29 01:38) [11]

Открыть файл Win32.hlp, вкладка "Find".
ввести фразу:
MoveFileEx Not Supported in Windows 95 But Functionality Is
Открыть соответствующую статью, читать до просветления.


 
KilkennyCat ©   (2004-06-29 02:32) [12]

Насколько я помню, стнадартный способ удаления инсталлятора несколько другой - после перезагрузки системы.


 
GrayFace ©   (2004-07-02 15:09) [13]

KilkennyCat [12], это не есть хорошо, даже если это стандарт. vertal правильно посоветовал. Вот что я нашел:
C:\WINDOWS\ISUNINST.EXE -f"...\Uninst.isu" -c"...\Uninst.dll". Эта dll - случайно, не то, что тебе нужно?


 
vertal ©   (2004-07-03 18:27) [14]

Может эта dll и то , что нужно , но файл Uninst.dll я не нашел ни в системе Win98 , ни в системе Win2000 .А ISUNINST.EXE есть и там и там , он при запуске спрашивает что-то типа "Are you want to completly remove selected application and all of its components?" , непонятно правда , что он хочет удалить , и непонятно , как от него получить справку о его использовании.


 
Cobalt ©   (2004-07-04 02:00) [15]

2 vertal ©
> Copyright InstallShield Corporation, Inc. 1990-1997
Может, у них посмотреть?
Или просто воспользоваться готовыми инсталляторами...



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

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

Наверх




Память: 0.5 MB
Время: 0.029 c
3-1090310952
Geoji
2004-07-20 12:09
2004.08.15
Дата


14-1090916643
ИМХО
2004-07-27 12:24
2004.08.15
Опрос: самая красивая женщина (девушка) планеты


3-1090401250
denis24
2004-07-21 13:14
2004.08.15
sql запрос


1-1091030683
Bloody-Wolf
2004-07-28 20:04
2004.08.15
Определение имени диска


14-1091184895
guest
2004-07-30 14:54
2004.08.15
Исходники Delphi