Как найти UpgradeCode и ProductCode установленного приложения в Windows 7

У меня есть приложение, установленное на моей машине. У меня также есть исходный код, но каким-то образом были изменены ProductCode и UpgradeCode этого приложения.

Теперь я хочу получить UpgradeCode и ProductCode этого установленного приложения. Я считаю, что для этого должен быть какой-то инструмент.

Может ли кто-нибудь любезно дать мне знать, как получить UpgradeCode и ProductCode установленного приложения?


ВАЖНО : прошло какое-то время, так как этот ответ был первоначально опубликован, а умные люди придумали более разумные ответы. Проверить Как найти код обновления для установленного файла MSI? от @ Stein Åsmul, если вам нужен прочный и комплексный подход.


Вот еще один способ (вам не нужны никакие инструменты):

  • открыть системный реестр и HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall поиск ключа HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall (если это 32-разрядный установщик на 64-разрядной машине, он может быть под HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall вместо).
  • GUID, перечисленные под этим ключом, являются продуктами, установленными на этой машине
  • найти тот, о котором вы говорите, – просто шаг за шагом, пока вы не увидите его имя на правой панели

Этот GUID, на котором вы остановились, является ProductCode.

Теперь, если вы уверены, что переустановка этого приложения будет прекрасной, вы можете запустить следующую командную строку:

msiexec / i {PRODUCT-CODE-GUID-HERE} REINSTALL = ALL REINSTALLMODE = omus / l * v log.txt

Это будет «исправлять» ваше приложение. Теперь просмотрите файл журнала и найдите «UpgradeCode». Это значение сбрасывается там.

ПРИМЕЧАНИЕ. Это необходимо сделать только в том случае, если вы уверены, что переустановка streamа реализована правильно, и это не нарушит ваше установленное приложение.

Требуется некоторое время, чтобы возвращать результаты, легко много десятков секунд, но wmic хорошо работает и может быть сценарием:

 wmic product where "Name like '%Word%'" get Name, Version, IdentifyingNumber 

результат:

 IdentifyingNumber Name Version {90140000-001B-0409-0000-0000000FF1CE} Microsoft Office Word MUI (English) 2010 14.0.6029.1000 

IdentifingNumber – это ProductCode. Я не видел свойство для UpgradeCode, но, возможно, он мог быть похоронен под чем-то другим. См. http://quux.wiki.zoho.com/WMIC-Snippets.html для многих других примеров, включая удаление :

 wmic path win32_product where "name = 'HP Software Update'" call Uninstall 

Для всех, кто использует:

 Get-WMIObject win32_product 

Вы должны помнить, что это приведет к самоисцелению на каждом приложении MSI, установленном на ПК. Если вы хотите проверить eventvwr, он скажет, что он завершил реконфигурирование каждого продукта.

В этом случае я использую следующее (смесь метода Яна Скляренко):

 $Reg = @( "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*", "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*" ) $InstalledApps = Get-ItemProperty $Reg -EA 0 $WantedApp = $InstalledApps | Where { $_.DisplayName -like "**" } 

Теперь, если вы наберете:

 $WantedApp.PSChildName 

Вам будет дано следующее:

 PS D:\SCCM> $WantedApp.PSChildName {047904BA-C065-40D5-969A-C7D91CA93D62} 

Если ваша организация использует множество MST при установке приложений, которые вы хотели бы избежать использования self-heals encase, они возвращают некоторые важные настройки.

  • Примечание. Это найдет код вашего продукта, а затем обновление можно найти, как упоминалось в Ян. Я обычно, однако, просто использую «InstEd It!». или «Orca», затем перейдите в таблицу свойств MSI и перечислите их справа вверху.

Если у вас есть установщик MSI, откройте его с помощью Orca (инструмент от Microsoft), свойство таблицы (строки UpgradeCode, ProductCode, версия продукта и т. Д.) Или таблицу. Обновить столбец «Обновить код».

Попробуйте найти instller через реестр: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall найти необходимый подраздел и посмотреть значение InstallSource. Возможно, по пути вы сможете найти файл MSI.

Powershell справляется с такими задачами довольно удобно:

 $productCode = (gwmi win32_product | ` ? { $_.Name -Like "*" } | ` % { $_.IdentifyingNumber } | ` Select-Object -First 1) 

Затем вы можете использовать его для получения информации об удалении:

 $wow = "" $is32BitInstaller = $True # or $False if($is32BitInstaller -and [System.Environment]::Is64BitOperatingSystem) { $wow = "\Wow6432Node" } $regPath = "HKEY_LOCAL_MACHINE\SOFTWARE$wow\Microsoft\Windows\CurrentVersion\Uninstall" dir "HKLM:\SOFTWARE$wow\Microsoft\Windows\CurrentVersion\Uninstall" | ` ? { $_.Name -Like "$regPath\$productCode" } 

В предварительном сборке Windows 10 с PowerShell 5 я вижу, что вы можете сделать:

 $info = Get-Package -Name YourInstalledProduct $info.Metadata["ProductCode"] 

Не знаю даже не уверен, что все продукты имеют UpgradeCode, но согласно этому сообщению вам нужно найти UpgradeCode из этого пути реестра:

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UpgradeCodes 

К сожалению, значения ключа реестра – это ProductCode, а ключи реестра – это UpgradeCode.

Вы можете использовать методы MsiEnumProductsEx и MsiGetProductInfoEx для enums всех установленных приложений в вашей системе и сопоставления данных с вашим приложением

Другой способ – слишком сложное обходное решение, с тем чтобы не переустанавливать приложение в качестве предыдущего обходного пути. Это требует наличия у вас доступа к msi (или setup.exe с встроенным msi).

Если у вас есть Visual Studio 2012 (или, возможно, другие издания) и установите бесплатный «InstallShield LE», вы можете создать новый проект установки с помощью InstallShield.

Один из параметров конфигурации на этапе «Организация вашей установки» называется «Пути обновления». Откройте свойства для путей обновления, а в левой панели щелкните правой кнопкой мыши «Обновить пути» и выберите «Новый путь обновления» … теперь перейдите к msi (или setup.exe, содержащему msi) и нажмите «открыть». Код обновления будет заполнен для вас на странице настроек на правой панели, которую вы теперь увидите.

Не нашел способа узнать UpgradeCode из установленного приложения, прежде чем увидеть обходное решение Яна Скляренко (в настоящее время) выше. Но если вы / кто-либо еще найдет способ узнать (по крайней мере) как UpgradeCode, так и ProductCode из MSI, читайте дальше.

Из http://www.dwarfsoft.com/blog/2010/06/22/msi-package-code-fun/ , измененный для разрешения (при запуске с помощью wscript.exe ) одного всплывающего windows информации для MSI (Trunicated at 1023 символы, из-за ограничения wscript.echo ); возможность ввода MSI (ов) из графического интерфейса пользователя, а также CLI; некоторая базовая проверка достоверности данных; удаленный код отладки (‘Set oDatabase) и 1 исправление ошибок (DB.OpenView).

 'Created by: Chris Bennett 'Created Date: 22/06/2010 'Description: ' Opens up MSI file(s) Passed as Arguments & returns ProductName, ProductCode, ' The HKCR key created from ProductCode (a Packed GUID of ProductCode), the ' PackageCode and the UpgradeCode of the MSI. Much quicker than getting these ' out of the MSI's the Manual Way. 

Рекомендации:
http://msdn.microsoft.com/en-us/library/aa369794%28VS.85%29.aspx http://www.eggheadcafe.com/forumarchives/platformsdkmsi/Jan2006/post25948124.asp

 if wscript.arguments.count = 0 then MSIs = inputbox("Enter in * delimited list of MSI's to query (Max 254 characters)", "MSI Product Details") MSIs = split(MSIs,"*") else set MSIs = wscript.arguments end if set objFS = createobject("scripting.filesystemobject") For Each MSIPath in MSIs if objFS.fileexists(MSIPath) then Set MSIDetails = EvaluateMSI(MSIPath) MSIDetails = MSIPath & ": " & vbcrlf & vbcrlf & "Product Name: " &_ MSIDetails("ProductName") & vbcrlf & "Product Code: " &_ MSIDetails("ProductCode") & vbcrlf & "Product Key : " &_ "HKCR\Installer\Products\" & PackGUID(MSIDetails("ProductCode")) &_ vbcrlf & "Package Code: " & MSIDetails("PackageCode") & vbcrlf &_ "Upgrade Code: " & MSIDetails("UpgradeCode") & vbcrlf WScript.Echo MSIDetails else wscript.echo "Inaccessible; Non-existant; or Error in Path for:" & vbcrlf & MSIPath & vbcrlf & "... skipping" end if Next Function EvaluateMSI(MSIPath) On Error Resume Next ' create installer object Set oInstaller = CreateObject("WindowsInstaller.Installer") ' open msi in read-only mode Set oDatabase = oInstaller.OpenDatabase(MSIPath, 0) Set objDictionary = CreateObject("Scripting.Dictionary") ' Get Package Code from Summary Information Stream Set streamobj = oDatabase.SummaryInformation(0) '0 = read only objDictionary("PackageCode") = streamobj.Property(9) ' Get Product Name from MSI Database Set View = oDatabase.OpenView("Select `Value` From Property WHERE `Property`='ProductName'") View.Execute Set ProductName = View.Fetch objDictionary("ProductName") = ProductName.StringData(1) ' Get Product Code from MSI Database Set View = oDatabase.OpenView("Select `Value` From Property WHERE `Property`='ProductCode'") View.Execute Set ProductCode = View.Fetch objDictionary("ProductCode") = ProductCode.StringData(1) ' Get Upgrade Code from MSI Database Set View = oDatabase.OpenView("Select `Value` From Property WHERE `Property`='UpgradeCode'") View.Execute Set UpgradeCode = View.Fetch objDictionary("UpgradeCode") = UpgradeCode.StringData(1) Set EvaluateMSI = objDictionary On Error Goto 0 End Function Function PackGUID(guid) PackGUID = "" '* Dim temp temp = Mid(guid,2,Len(guid)-2) Dim part part = Split(temp,"-") Dim pack pack = "" Dim i, j For i = LBound(part) To UBound(part) Select Case i Case LBound(part), LBound(part)+1, LBound(part)+2 For j = Len(part(i)) To 1 Step -1 pack = pack & Mid(part(i),j,1) Next Case Else For j = 1 To Len(part(i)) Step 2 pack = pack & Mid(part(i),j+1,1) & Mid(part(i),j,1) Next End Select Next '* PackGUID = pack End Function 

Если вам нужно скопировать и вставить любой из GUID во всплывающем окне, я, как правило, проще всего использовать последующее входное поле, например, inputbox "","",MSIDetails

Если у вас нет msi, и вам нужен код обновления, а не код продукта, тогда ответ здесь: Как найти код обновления для установленного приложения на C #?

  • Установите Visual Studio 2013 на Windows 7
  • Как регистрировать типы файлов / расширения с помощью установщика WiX?
  • Получить установленные приложения в системе
  • Ошибка , когда я пытался обновить приложение
  • Visual Studio 2013 - Нет установленных веб-шаблонов Visual Basic / Visual C #
  • Ошибка установки углового с использованием npm из-за необходимости использовать строку
  • Как установить Windows Phone 8 SDK на Windows 7
  • Что такое ошибка INSTALL_PARSE_FAILED_NO_CERTIFICATES?
  • Ошибка: невозможно найти adb в SDK в Android Studio
  • Как я могу получить последнюю версию JRE / JDK как zip-файл, а не EXE или MSI-установщик?
  • Установка VB6 на Windows 7 (или Windows 8) (или Windows 10)
  • Interesting Posts

    Как мне ZIP-файл на C #, без использования сторонних API-интерфейсов?

    Добавить значения в строку запроса

    Удалить столбцы с нулевыми значениями из фрейма данных

    Как записать в экранное меню KDE или уведомление с консоли?

    Почему добавление «” в String сохраняет память?

    java.rmi.ConnectException: подключение отказалось от хоста: 127.0.1.1;

    Загрузите ссылку itunes для приложения перед отправкой

    Отсутствует артефакт com.sun: tools: jar

    Вызов метода Objective-C из функции члена C ++?

    В Windows Explorer почему мы можем создать папку или файл с символом процента (%), если символ процента используется для существующих переменных?

    Как я могу изменить содержимое файла ISO?

    Не удалось найти двоичный файл winutils в двоичном пути hadoop

    Как читать большой XML-файл, не загружая его в память и используя XElement

    Как повторно включить плагин Java в Google Chrome 42 на Windows

    Качество изображения после изменения размера очень низкое – Java

    Давайте будем гением компьютера.