|
Как запустить Uninstall программно?
|
|||
---|---|---|---|
#18+
Пуск->Настройка->Панель Управления->Установка и удаление программ Там прога TheProga X.Y.Z , где TheProga-название программы-величина постоянная X.Y.Z-номер версии, который может быть любым Cмысл: при установке новой версии (да хоть бы старой или той же самой) текущую инсталляцию надо удалить. Известно только имя программы, понятно что shell (uninstall.exe), только в общем случае непонятно куда программа была установлена юзером. Рассчитывать на то, что юзер перед установкой новой версии прочтет хэлп и удалит предыдущую несколько наивно, обычно сразу жмут setup_new_version.exe. Т.е. зная имя программы, проинициализировать правильный Uninstall (хотя бы), типа если не автоматически удалить, то хотя б носом ткнуть. Можно конечно пытаться вычислять скажем через реестр: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\TheProga X.Y.Z Ключ UninstallString содержит точный путь к uninstall.exe Можно конечно попытаться запихнуть в инсталлер всю логику un-инсталлера, но это слишком, да и непонятно что там де-инсталлить надо в завис. от установленной версии.... Но м.б. есть более грамотный способ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2010, 04:08 |
|
Как запустить Uninstall программно?
|
|||
---|---|---|---|
#18+
Не претендуя на полноту ответа... почти все инсталляторы умеют создавать ярлык для деинсталляции программы - то есть можно подсмотреть, как он устроен. Вычислить, где находится программа, можно, наверное, через реестр, ну или она сама прописывает это в определенное место после установки. Для PDW я пользуюсь для деинсталляции такой строкой: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2010, 10:29 |
|
Как запустить Uninstall программно?
|
|||
---|---|---|---|
#18+
Shocker.Proумеют создавать ярлык для деинсталляции программы... Вычислить, где находится программа, можно, наверное, через реестр... Ну, на этот вопрос по сути уже ответил. Димаскажем через реестр: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\TheProga X.Y.Z Ключ UninstallString содержит точный путь к uninstall.exe Хотя, если это можно вычислить через какие-то API, предпочел бы API... Shocker.ProДля PDW я пользуюсь для деинсталляции такой строкой... Ну, ключ /s для своего (де)инсталлятора я нашел, т.е. зная путь к uninstall можно дать команду Код: plaintext
Но: 1) я должен вычислить этот путь 2) я должен ждать завершения работы uninstall перед тем как начать install. Пользуюсь Smart Install Maker. п.(1) он сам не вычислит, а опция "запустить команду до распаковки, ждать завершения" работает криво, т.е. запускает uninstall и не дожидаясь бухает новые файлы поверх параллельно удаляемых старых, т.е. бардак по полной-не вариант. Собственно, идея такая. Надо написать оболочку к Setup (менять основной Setup не хочу). Что хотелось бы: 1) Один файл main.EXE 2) при нажатии на него получаем MyExtSetup.exe и Setup.exe(кот.собственно setup сейчас есть) 3) запускается MyExtSetup.exe кот. (а) вычисляет путь к предыдущей инсталяции; (б) запускает Path/uninstall.exe /s (в) по окончании запускает настоящий setup.exe (г) по окончании удаляется этот настоящмй setup.exe и MyExtSetup.exe -уборка мусора за собой Можно было бы конечно просто наложить в zip несколько файлов, но хочется чтоб main.EXE был единственным, распаковку производить напр. в %temp%, при этом конечно еще убрать за собой. Как это реализовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2010, 13:57 |
|
Как запустить Uninstall программно?
|
|||
---|---|---|---|
#18+
Можно конечно попытаться упаковать один setup в другой, используя один и тот же Smart Install Maker со всевозможными опциями, но это конечно надо играться, чтоб было красиво и чисто... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2010, 14:01 |
|
Как запустить Uninstall программно?
|
|||
---|---|---|---|
#18+
Можно написать скрипт для MS'овского wscript Я вот опять занялся скриптами для AutoIt. С его помощью можно такое быстро сделать. То есть инсталлятор разворачивается и запускает скрипт, скрипт находит, что нужно, и удаляет, затем запускает сетап инсталлятора... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2010, 21:32 |
|
Как запустить Uninstall программно?
|
|||
---|---|---|---|
#18+
Дмитрий77Можно конечно попытаться упаковать один setup в другой, используя один и тот же Smart Install Maker со всевозможными опциями, но это конечно надо играться, чтоб было красиво и чисто... Я вот пока на этой идее остановился, предварительные опыты показывают что это работать будет. Одна из проблем: Дмитрий77опция "запустить команду до распаковки, ждать завершения" работает криво, т.е. запускает uninstall и не дожидаясь бухает новые файлы ... Uninstall похоже хитро устроен. Запускаясь из папки программы он тупо копирует себя в %temp%, завершается, а оттуда уже похоже запускается на исполнение по нормальному, поэтому опции самого же инсталлера и всякие там ShellAndContinue не катят и срабатывают сразу же вместо чтоб дождаться реального окончания Uninstall. Извернулся так (без вспомогательной проги-индикатора никак),ниже тест: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51.
Осталось найти эту самую "c:\Program Files\TheProga\uninstall.exe" т.е. 1) Найти нужную папку реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ TheProga X.Y.Z 2) Прочитать в ней Ключ UninstallString (2) не проблема, Как перебрать папки реестра на предмет поиска TheProga X.Y.Z ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2010, 23:31 |
|
Как запустить Uninstall программно?
|
|||
---|---|---|---|
#18+
Дмитрий77 Как перебрать папки реестра на предмет поиска TheProga X.Y.Z ??? Ответ на этот вопрос как бы нашел. Есть грамотный пример: How To Enumerate the Subkeys of an Open Registry Key Но сам задал себе вопрос... Может быть несколько точек входа (как результат непродуманности предыдущих инсталляторов и деятельности наивных юзеров, жмущих тупо setup), например вот так: Код: plaintext 1. 2.
В приведенном примере с 2.1.1 все ясно. А с 2.0.0 и 1.0.0 абсолютно не ясно, т.е. 1) неясно чего там сидит 1.0.0 или 2.0.0 2) понятно, что если удалить один раз, то второй раз C:\Program Files\TheProga\uninstall.exe запустить уже не получится, при этом хорошо бы подчистить реестр (пункт в установка/удаление программ, ибо он будет ложный). Т.е. наверно логика должна быть такой: 1) Для каждой уникальной UninstallString выясняем таки наличие там реальной установки (файл uninstall.exe присутствует) и реальную версию (для красоты хотя б) например по версии какого-либо характерного файла: Get file version information 2) При наличии установки удаляем эту версию. 3) Тупо удаляем все ключи реестра кот. соответствуют этой UninstallString, если остались (это чтоб не было ложных отображений в установка/удаление программ). ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2010, 02:07 |
|
|
start [/forum/topic.php?fid=60&msg=36985321&tid=2159196]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 326ms |
total: | 462ms |
0 / 0 |