|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
и найти путь к нему? Т.е. например, есть приложение А, которое на старте определяет, установлено ли приложение Б в системе, и если да то добавляет себе в меню запуск ехе по обнаруженному пути. Попробовал такой путь: https://stackoverflow.com/questions/908850/get-installed-applications-in-a-system Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Но оказалось, что InstallLocation во многих случаях пустой, и определить факт, что продукт установлен - можно, но найти путь к нему - остается вопросом ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2018, 18:22 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
256k, в виндах нет единого механизма для этого. Только анализировать конкретное приложение и смотреть где и как оно следы оставляет. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2018, 18:25 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
256k string registry_key = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; ИМХО, для приложения с классическим инсталлером это правильный путь. Я во всяком случае так проверяю при установке, установлено ли УЖЕ мое это приложение и вычисляю путь к un-инсталлеру (а заодно и ко всему остальному, что лежит там же). ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2018, 18:31 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
Дмитрий77256k string registry_key = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; ИМХО, для приложения с классическим инсталлером это правильный путь. Я во всяком случае так проверяю при установке, установлено ли УЖЕ мое это приложение и вычисляю путь к un-инсталлеру (а заодно и ко всему остальному, что лежит там же). Это да, но как найти путь, где установлен продукт? InstallLocation - пустой. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2018, 18:36 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
Pu4koff, Почему? WinInstall это бд в винде. Там в табличках все есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2018, 18:38 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
256kЭто да, но как найти путь, где установлен продукт? InstallLocation - пустой. Ну, ты же знаешь какой конкректно продукт ты ищешь. Напр, UninstallString - путь к де-инсталлеру, а он как правило лежит в папке с продуктом. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2018, 18:50 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
Petro123Pu4koff, Почему? WinInstall это бд в винде. Там в табличках все есть. WinInstall - это msi инсталляторы или что? Часть программ ставится тупо как распаковка архива и нигде никак не оставляют о себе информацию. У части какие-то свои самодельные инсталляторы, у каждого свои заморочки. Какие-то программы ставятся на машину, какие-то - на пользователя. В винде никакой обязаловки на этот счёт нет. Даже разные продукты Microsoft ведут себя как хотят и нет никакой политики партии и единства. Инсталляторы же делаются, чтобы ставилось ПО и работало, а какая-то там вспомогательная и необязательная информация - это никому не интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2018, 19:09 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
Дмитрий77256kЭто да, но как найти путь, где установлен продукт? InstallLocation - пустой. Ну, ты же знаешь какой конкректно продукт ты ищешь. Напр, UninstallString - путь к де-инсталлеру, а он как правило лежит в папке с продуктом. или там будет msiexec.exe {GUID} ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2018, 19:12 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
Pu4koffили там будет msiexec.exe {GUID} Ну наверняка этот {GUID} известно где лежит...в том же реестре хотя я msiexec.exe никогда не пользовал, не знаю. Но общий мысль такой, что если продукт конкретный, то что-то конкретное (где лежит) про него вытянуть из реестра или откуда-то там можно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2018, 19:23 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
Дмитрий77Pu4koffили там будет msiexec.exe {GUID} Ну наверняка этот {GUID} известно где лежит...в том же реестре хотя я msiexec.exe никогда не пользовал, не знаю. Но общий мысль такой, что если продукт конкретный, то что-то конкретное (где лежит) про него вытянуть из реестра или откуда-то там можно. А может просто в Current User будет раздел Software\SPARK и там уже запись InstallPath или ExePath какой-нибудь. Об этом я сразу и написал, что нет тут серебряной пули и нужно смотреть по месту. ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2018, 19:31 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
Pu4koff, Мы про те что стоят в Меню - Компьютер - Добавление и удаление программ. Очевидно что не про портабле. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2018, 19:54 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
Petro123Pu4koff, Мы про те что стоят в Меню - Компьютер - Добавление и удаление программ. Очевидно что не про портабле. Что-то типа официального источника такой информации я знаю только тот самый реестр, где ТС уже смотрел. Для x64 систем там еще одну соседнюю ветку можно смотреть Wow6432 или что-то в этом духе. Админским штатным путём можно пожалуй считать WMI. Например, в PowerShell можно выполнить скрипт: Код: powershell 1.
у меня лично большинство записей без пути установки, что собственно и не удивительно, т.к. источник информации тот же реестр. Так что придётся таки изучать конкретный продукт и под него подстраиваться. Варианты тут такие: 1) Программа хранит настройки в реестре и есть ветка с именем программы (обычно по имени называют, но могут и GUID использовать какой-нибудь) и разработчики туда записали путь к корневой папке 2) Программа обычно ставится в ассоциацию с непопулярным расширением, тогда в реестре в разделе по ассоциации с этим расширением можно взять расположение exe-файла программы. Дополнительно по имени exe-шника удостовериться, что это нужная программа и вырезать путь. 3) Тупо в лоб перебирать возможные популярные пути. Путь по-умолчанию естественно в первую очередь (не у всех программ инсталляторы хотят в програмфайлс устанавливать изначально, есть и ценители всяких C:\StroySoft\). 4) Пусть пользователь вообще сам показывает куда поставил стороннюю программу, а то обленились понимаешь. Раньше часто встречал программы, которые лениво пытались сами проставить дефолтный путь из пункта 3, а в случае облома давали пользователю самому выбирать куда он чего поставил. Причём этим грешили даже сами разработчики программы, когда ставилось обновление или плагин какой. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2018, 21:57 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
Pu4koffWMI +1 API мне больше нравится чем реестр. Мы же программисты)). ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2018, 23:44 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
Petro123Pu4koffWMI +1 API... Какие же это API? Это нехилая такая оболочка, часто тормознутая и с глюками. Вот это список модемов через WMI Вот это тоже самое через API 16059078 Разницу чувствуете? WMI, да, пару строк кода. API - простыня. Но в указанном примере API отрабатывает мгновенно, а WMI "думает пару секунд, чего-то там запускает", + WMI при нек. условиях в конкретном примере может дать сбой (долго объяснять). Если выбор между WMI и "тупо прочесть реестр", то быстрее и надежней второе. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2018, 00:20 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
Дмитрий77, Пусть автор решает. https://msdn.microsoft.com/en-us/library/windows/desktop/aa372454(v=vs.85).aspx Я такое вообще в IDE инсталлятора делал. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2018, 07:27 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
Petro123Пусть автор решает. Не спорю. Идей ему достаточно подкинули. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2018, 11:02 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
256k, cmd C:\Users\SPAWN>WMIC wmic:root\cli> "/?" for help, QUIT to Exit. wmic:root\cli>/output:C:\windows\temp\apps.txt product get name,version look apps.txt ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2018, 11:06 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
Дмитрий77Petro123Пусть автор решает. Не спорю. Идей ему достаточно подкинули. Вроде и достаточно, а по сути - топчемся на месте. В реестре значение ключа для анинстолла - "или там будет msiexec.exe {GUID}" П-ц. WMI может быть не активен в общем случае. Где-то есть в реестре путь, думалось, что есть какое-то известное место, а получается "как всегда" ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2018, 11:25 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
256k, Ну, а что ты хотел? Я вот например знаю куда моя программа чего пишет. И конечно найду ее, куда б юзер ее не засунул. Еще я напр. знаю куда WinMail (вистовский) чего пишет, что уже не тривиально, поэтому я его юзаю на последнем Win10 в том числе, и плевать что MS его "убил" еще в семерке, не предоставив людям нормальной альтернативы. Вот и ты должен потратить драгоценное свое время, чтоб выяснить куда чего пишет то что нужно конкретно тебе. Оно поверь окупается впоследствии. Вот лично мне твой SPARK не интересен, я даже не знаю что это такое, как есть и чем закусывать. Открываешь regedit, делаешь поиск по "ключевым словам", вангуешь и мухлюешь. Это не в обиду, это очень хороший совет, не обессудь. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2018, 11:43 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
256kДмитрий77пропущено... Не спорю. Идей ему достаточно подкинули. Вроде и достаточно, а по сути - топчемся на месте. В реестре значение ключа для анинстолла - "или там будет msiexec.exe {GUID}" П-ц. WMI может быть не активен в общем случае. Где-то есть в реестре путь, думалось, что есть какое-то известное место, а получается "как всегда" MsiGetProductInfo https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa370130(v=vs.85).aspx На вход дать гуид поиска программы. Тот же что в реестре. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2018, 11:46 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
Petro123MsiGetProductInfoу меня в скрипте работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2018, 11:47 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
Дмитрий77256k, Ну, а что ты хотел? Я вот например знаю куда моя программа чего пишет. И конечно найду ее, куда б юзер ее не засунул. Еще я напр. знаю куда WinMail (вистовский) чего пишет, что уже не тривиально, поэтому я его юзаю на последнем Win10 в том числе, и плевать что MS его "убил" еще в семерке, не предоставив людям нормальной альтернативы. Вот и ты должен потратить драгоценное свое время, чтоб выяснить куда чего пишет то что нужно конкретно тебе. Оно поверь окупается впоследствии. Вот лично мне твой SPARK не интересен, я даже не знаю что это такое, как есть и чем закусывать. Открываешь regedit, делаешь поиск по "ключевым словам", вангуешь и мухлюешь. Это не в обиду, это очень хороший совет, не обессудь. проверил вариант через WMI - та же фигня, он выворачивает по сути ту же ветку реестра, и InstallLocation пустой тоже ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2018, 11:48 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
256kпроверил вариант через WMI - та же фигня, он выворачивает по сути ту же ветку реестра, Во-во. О чем и я пытался сказать несколькими постами выше, намекая о том что чтение реестра в лоб эффективнее WMI (при отсутствии нормальных API, которые впрочем тоже туда же лезут, но "по классической науке" и без "песочных часиков"). ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2018, 11:53 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
256kпроверил вариант через WMI -во первых код давай. Во вторых, у меня работает, значит что то делаю не так) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2018, 12:14 |
|
Как определить установлен ли продукт?
|
|||
---|---|---|---|
#18+
Petro123256kпроверил вариант через WMI -во первых код давай. Во вторых, у меня работает, значит что то делаю не так) В перечислении пропертей есть InstallLocation, но там пусто, как, собственно и в реестре. Пошел в реестр, пальцами написал в ключ InstallLocation: fignya Но эта функция все равно дает пусто private bool isInstalled(string name) { ManagementObjectSearcher p = new ManagementObjectSearcher("SELECT * FROM Win32_Product"); foreach (ManagementObject program in p.Get()) { if (program != null && program.GetPropertyValue("Name") != null && program.GetPropertyValue("Name").ToString().Contains(name)) { Console.WriteLine(@"FOUND: {0}", name); foreach(var item in program.Properties) { Console.WriteLine(@"---: {0}, {1}", item.Name, item.Value); } return true; } } return false; } ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2018, 17:04 |
|
|
start [/forum/topic.php?fid=20&msg=39582367&tid=1399534]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
76ms |
get tp. blocked users: |
1ms |
others: | 316ms |
total: | 501ms |
0 / 0 |