Удалите 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