Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.032 c
6-1085922572
Piter
2004-05-30 17:09
2004.08.15
NetMessageBufferSend


3-1090049583
Valer
2004-07-17 11:33
2004.08.15
Access, изменение содержимого запроса.


6-1087210068
-=IVA=-
2004-06-14 14:47
2004.08.15
Поможите с UDP


1-1091018462
Sur
2004-07-28 16:41
2004.08.15
Как удалить блок в файле?


3-1090226443
GanibalLector
2004-07-19 12:40
2004.08.15
синтаксис в ХП





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский