Инсталирам MSI файл като част от моя скрипт за инсталиране на Inno Setup. Има ли начин също да го деинсталирам като част от процеса на деинсталиране на моята програма?
Деинсталирайте MSI по време на деинсталиране на Inno Setup
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