首页 > 解决方案 > 为什么 Inno Setup 不卸载我的 SQL Server 2017 命名实例?

问题描述

我有一个 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 ] 我将 SetupLogging=yes 添加到 [Setup] 部分,希望在日志文件中看到有用的信息。Inno Setup 在我运行安装时创建了日志文件,但在我通过右键单击控制面板中的 Inno Setup 生成的安装程序运行卸载时没有创建任何日志文件。

我在这里想念什么?

标签: sql-serverwindows-10inno-setup

解决方案


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

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

因此,在您运行卸载程序时,{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}.

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


推荐阅读