Я пытаюсь понять разницу между ключами GUID и не-GUID в HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall.
Некоторые вещи имеют ключ GUID и не-GUID ключ, с очень разными UninstallStrings. Например, Autodesk Revit имеет хорошую UninstallString в ключе GUID
MsiExec.exe /X{7346B4A0-1900-0510-0000-705C0D862004})
Но я думаю, что в ключе, отличном от GUID, UninstallString на самом деле является строкой исправления.
C:\Program Files\Autodesk\Revit 2019\Setup\Setup.exe /P {7346B4A0-1900-0510-0000-705C0D862004} /M RVT /LANG en-US)
Но другие, такие как Autodesk Desktop App, не имеют ключа GUID, и UninstallString в ключе без GUID работает хорошо.
C:\Program Files (x86)\Autodesk\Autodesk Desktop App\removeAdAppMgr.exe
Мне интересно, это нормально или, может быть, это какая-то глупость, присущая только Autodesk? И есть ли хороший ресурс Microsoft, подробно описывающий, какая информация ожидается в различных папках Uninstall? Пока что я не могу найти ничего подробного.
EDIT: Подобным образом я обнаружил, что Microsoft тоже делает дубликаты, но не GUID против нет. Вот три разных Uninstall с одинаковым DisplayName, но ссылаются на три разных GUID. Кроме того, все это x64-установки, но они находятся в WOW6432Node. Разочаровывает.
Visual C++ 2008 - x64 (KB958357) - v9.0.30729.177
C:\Windows\SysWOW64\msiexec.exe /x {8CCEA24C-51AE-3B71-9092-7D0C44DDA2DF} /qb+ REBOOTPROMPT=""
Visual C++ 2008 - x64 (KB958357) - v9.0.30729.177
C:\Windows\SysWOW64\msiexec.exe /x {C3A57BB3-9AA6-3F6F-9395-6C062BDD5FC4} /qb+ REBOOTPROMPT=""
Visual C++ 2008 - x64 (KB958357) - v9.0.30729.177
C:\Windows\SysWOW64\msiexec.exe /x {F6F09DD8-F39B-3A16-ADB9-C9E6B56903F9} /qb+ REBOOTPROMPT=""
решение1
Хороший ответ уже опубликован, я все равно опубликую то, что начал писать до того, как ваш вопрос был удален.
TheGUID
ключи обычноWindows Installer setups
(файлы с*.MSI
расширение) — устаревший стандарт развертывания Microsoft, активно используемый в корпорациях.
Существует множество различных видов установщиков, но они, как правило, упакованы в setup.exe
файлы или MSI files
более новые виды форматов установщиков, такие как APPX
(уже устаревшие), MSIX
(новообразующие) и т. д. На самом деле возможностей много.
АвтоДескпохоже, что используется устаревший setup.ex
установщик e, который не основан на Windows Installer
, хотя все еще возможно, что setup.exe
указанный файл является оболочкой, которая запускает пакет установщика Windows.
Ниже я добавлю несколько ссылок на информацию о различных типах настроек и задачах, связанных с настройками (например, извлечение файлов).
Некоторые ссылки:
- Извлечь MSI из EXE(множество дополнительных ссылок)
- Простой список наиболее используемых инструментов развертывания(для установщика Windows)
- Более полный список ссылок на инструменты развертывания(всех видов)
- Как узнать GUID продукта установленной установки MSI?
- Удаление MSI-файла из командной строки без использования msiexec
В этих ответах есть много других ссылок на похожие материалы.
решение2
Когда разработчик создает приложение, он обычно выбирает метод его установки. Одним из популярных вариантов является использование установщика Windows и, следовательно, создание MSI-файла. Файл MSI по сути является базой данных, которая сообщает установщику Windows, как устанавливать программное обеспечение, т. е. файлы для удаления, ключи реестра для создания, службы для создания и т. д. Популярные инструменты для создания файлов MSI:WiXилиУстановить Щит.
В рамках создания MSI продукту должен быть назначен уникальный GUID, называемый ProductCode. Именно этот код продукта вы видите под ключом Uninstall. Значение UninstallString использует ProductCode, поскольку установщик Windows может использовать его для удаления приложения с помощью ключа /X.
Разработчик может не использовать Windows Installer и написать свой собственный установщик. Однако, чтобы он появился в Programs and Features, разработчику нужно будет вручную создать ключи Uninstall для приложения. Как минимум, ему нужно будет задать DisplayName и UninstallString (ссылка). Маловероятно, что они создадут GUID для идентификации приложения, но они могли бы это сделать.
Если разработчик создал пользовательский установщик, то разработчику также необходимо предоставить некоторый метод для удаления приложения. В результате большинство разработчиков создают отдельное приложение для удаления, на которое указывает UninstallString. Это приложение также может быть использовано для предоставления возможности изменить, восстановить или удалить приложение.
На самом деле это предпочтение разработчика.