为什么Inno Setup无法卸载我的SQL Server 2017命名实例?

时间:2019-07-23 15:14:12

标签: sql-server windows-10 inno-setup

我有一个如下所示的Inno Setup v5.5.9文件;

[Languages]
Name: english; MessagesFile: compiler:Default.isl

[Files]
Source: "Setups\SQLEXPR_x64_ENU.exe"; DestDir: {tmp}\Setups; Flags: nocompression;

[UninstallRun]
Filename: {tmp}\Setups\SQLEXPR_x64_ENU.exe; Parameters: "/QS /ACTION=unInstall /FEATURES=SQLENGINE /INSTANCENAME=CASSQL"; 

[Run]
Filename: {tmp}\Setups\SQLEXPR_x64_ENU.exe; Parameters: "/QS /ACTION=Install /FEATURES=SQLENGINE /INSTANCENAME=CASSQL /INSTANCEDIR=""{pf}\Microsoft SQL Server\MSSQL14.CASSQL"" /SQLSVCACCOUNT=""NT Authority\Network Service"" /TCPENABLED=1 /SECURITYMODE=SQL /ADDCURRENTUSERASSQLADMIN /SAPWD=sapassword /IACCEPTSQLSERVERLICENSETERMS";

安装工作正常,但是一旦安装,如果我进入“控制面板”并右键单击安装程序并选择“卸载”,则卸载将从控制面板中删除安装程序,但实际上并不会运行SQLEXPR_x64_ENU.exe或卸载SQL Server Express命名实例。

我了解到Inno Setup会自动处理卸载,因此我删除了[UninstallRun]部分,但结果相同。

我可以运行以下命令:

  

SQLEXPR_x64_ENU.exe / QS / ACTION = unInstall / FEATURES = SQLENGINE   / INSTANCENAME = CASSQL

在命令行中,它可以按预期工作。

[ UPDATE#1 7/23/19 ] 我在[Setup]部分中添加了SetupLogging = yes,希望在日志文件中看到有用的东西。运行安装时,Inno Setup创建了日志文件,但是通过右键单击“控制面板”中的Inno Setup生成的安装程序来运行“卸载”时,Inno Setup没有创建任何日志文件。

我在这里想念什么?

1 个答案:

答案 0 :(得分:1)

安装到{tmp}的文件仅存在安装期间:

  

安装或卸载使用的临时目录。这不是用户的TEMP环境变量的值。它是用户临时目录的子目录,该目录由启动时的安装或卸载创建(名称类似“ C:\ WINDOWS \ TEMP \ IS-xxxxx.tmp”)。当安装程序或卸载程序退出时,将删除此目录中的所有文件和子目录。在安装过程中,这对于提取要在[运行]部分中执行但在安装后不需要的文件中很有用。

因此,在您运行卸载程序时,{tmp}\Setups\SQLEXPR_x64_ENU.exe不再存在。

如果您从命令行手动运行卸载程序并添加/log=C:\some\path\uninstall.log开关,则将在日志中找到以下内容:

2019-07-24 08:46:04.614   Running Exec filename: C:\Users\marti\AppData\Local\Temp\is-K316U.tmp\Setups\SQLEXPR_x64_ENU.exe
2019-07-24 08:46:04.614   Running Exec parameters: /QS /ACTION=unInstall /FEATURES=SQLENGINE /INSTANCENAME=CASSQL
2019-07-24 08:46:04.615   CreateProcess failed (2).

如果您希望能够在卸载过程中运行SQLEXPR_x64_ENU.exe,则必须将其部署到其他文件夹中,例如{app}

如果文件太大(可能是什么),您也可以将其嵌入到卸载程序中:
How keep uninstall files inside uninstaller?