Windows installer 在Inno安装卸载期间卸载MSI

Windows installer 在Inno安装卸载期间卸载MSI,windows-installer,inno-setup,Windows Installer,Inno Setup,我在Inno安装脚本中安装了一个文件。作为我的程序卸载过程的一部分,有没有办法也卸载它?有很多变体可以这样做。批次: @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"

我在Inno安装脚本中安装了一个文件。作为我的程序卸载过程的一部分,有没有办法也卸载它?

有很多变体可以这样做。批次:

@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”只是一个示例。

最简单的方法是了解MSI包的GUID

与安装后一样,它将在
'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工具”的一个示例。

Lex Li已经给了您一个如何做的示例——我要补充的是,有时候最好的选择是不做。具体来说,当MSI有自己的程序和特征条目时,这意味着用户在卸载应用程序后仍然可以选择卸载它,所以您需要考虑用户本身或其他安装的应用程序是否可能仍然需要该应用程序/组件。如果有疑问,最好是询问用户或将其留在那里,而不是冒险破坏另一个应用程序(因为原因通常不清楚)。MSI是否有某种依赖计数器,显示有多少程序在使用它们?我不知道,但我怀疑。典型的行为是,如果组件已经安装,甚至不运行MSI,这意味着它无论如何都没有机会更新其计数器,即使它确实有一个。