Деинсталирайте MSI по време на деинсталиране на Inno Setup

Инсталирам MSI файл като част от моя скрипт за инсталиране на Inno Setup. Има ли начин също да го деинсталирам като част от процеса на деинсталиране на моята програма?


person sashoalm    schedule 06.11.2013    source източник
comment
Лекс Ли вече ви даде пример как да го направите -- само ще добавя, че понякога най-добрият избор е да не го правите. По-конкретно, когато MSI има свой собствен запис за програми и функции, това означава, че потребителят все още ще има опцията да го деинсталира, след като деинсталира вашето приложение, така че ще трябва да прецените дали е възможно самият потребител или някое друго приложение те са инсталирали може все още да изискват това приложение/компонент за нещо. Ако се съмнявате, по-добре е да попитате потребителя или просто да го оставите там, отколкото да рискувате да счупите друго приложение (тъй като обикновено няма да е очевидно защо).   -  person Miral    schedule 07.11.2013
comment
MSI имат ли някакъв брояч на зависимости, който показва колко програми ги използват?   -  person sashoalm    schedule 07.11.2013
comment
Не знам, но се съмнявам. Типичното поведение е дори да не стартирате MSI, ако компонентът вече е инсталиран, което означава, че той така или иначе няма да има възможност да актуализира своя брояч, дори и да има такъв.   -  person Miral    schedule 08.11.2013


Отговори (2)


Най-лесният начин е да научите какъв е GUID на този MSI пакет,

http://msdn.microsoft.com/en-us/library/aa370568(v=vs.85).aspx

тъй като след инсталацията ще бъде регистриран под 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall (или неговия WOW64).

След като знаете GUID, той може да бъде деинсталиран чрез извикване

MsiExec.exe /X{A879B90E-B62C-4DA4-9C3F-79A1A6CFAAF9}

Тук {A879B90E-B62C-4DA4-9C3F-79A1A6CFAAF9} е пример за „Уеб страници на Microsoft ASP.NET – инструменти на Visual Studio 2010“.

person Lex Li    schedule 06.11.2013

Има много варианти да го направите. С партида:

@echo off
  setlocal
    set "key=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
    set raw=%key%\%%i
    for /f "tokens=7 delims=\" %%i in ('reg query %key%') do (
      if "%%i"=="Microsoft .NET Framework 3.5 SP1" (
        for /f "skip=4 tokens=2,*" %%j in ('reg query "%raw%" /v UninstallString') do (
          rem This command iniatlize uninstallation of .NET Framework
          start /wait "%%k"
        )
      )
    )
  endlocal
exit /b

С wmic:

wmic Product where Name="Microsoft .NET Framework 3.5 SP1" call Uninstall

И още.

P.S>„Microsoft .NET Framework 3.5 SP1“ е тук само за пример.

person greg zakharov    schedule 06.11.2013