我有一个如下所示的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没有创建任何日志文件。
我在这里想念什么?
答案 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?