为什么 Inno 安装程序不卸载我的 SQL Server 2017 命名实例?



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

[Languages]
Name: english; MessagesFile: compiler:Default.isl
[Files]
Source: "SetupsSQLEXPR_x64_ENU.exe"; DestDir: {tmp}Setups; Flags: nocompression;
[UninstallRun]
Filename: {tmp}SetupsSQLEXPR_x64_ENU.exe; Parameters: "/QS /ACTION=unInstall /FEATURES=SQLENGINE /INSTANCENAME=CASSQL"; 
[Run]
Filename: {tmp}SetupsSQLEXPR_x64_ENU.exe; Parameters: "/QS /ACTION=Install /FEATURES=SQLENGINE /INSTANCENAME=CASSQL /INSTANCEDIR=""{pf}Microsoft SQL ServerMSSQL14.CASSQL"" /SQLSVCACCOUNT=""NT AuthorityNetwork 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

从命令行,它按预期工作。

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

我在这里错过了什么?

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

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

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

如果从命令行手动运行卸载程序并添加/log=C:somepathuninstall.log开关,则会在日志中找到类似以下内容的内容:

2019-07-24 08:46:04.614   Running Exec filename: C:UsersmartiAppDataLocalTempis-K316U.tmpSetupsSQLEXPR_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}.

你也可以将文件嵌入到卸载程序本身中,如果它不是太大(它可能是什么):
如何将卸载文件保存在卸载程序中?

最新更新