Форум: "WinAPI";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];
ВнизПередача управления другой программе без возврата Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.036 c