Inno Setup应该在Update上删除旧文件吗?

时间:2014-04-25 07:49:36

标签: inno-setup

我正在使用Inno Setup来安装和更新我的python应用程序。

在更新时,安装程​​序不会删除先前安装中的py文件,这会产生两个问题:

  • 我正在使用插件:如果我删除了新版本的插件,那么执行更新的用户仍然可以使用插件。

  • 卸载更新的安装时,旧安装中的文件将不会被删除。(无法重现......)

如何在升级之前强制Inno安装程序卸载我的应用程序?

这是我的剧本:

[Setup]
AppName=Foo
AppVersion=0.1
PrivilegesRequired=lowest
AppId=FooID
RestartIfNeededByRun=False
DefaultDirName={localappdata}\Foo
DisableWelcomePage=True
DisableReadyPage=True
OutputDir=.\win
OutputBaseFilename=setup_Foo
AllowNoIcons=yes
DefaultGroupName=Foo

[Files]
Source: "dist\Foo.exe"; DestDir: "{app}"
Source: "..\*"; DestDir: "{app}\"; Flags: recursesubdirs; Excludes: "*.pyc,installer"

[Icons]
Name: "{group}\Foo"; Filename: "{app}\Foo.exe"; WorkingDir: "{app}"
Name: "{group}\Uninstall Foo"; Filename: "{uninstallexe}"

[Dirs]
Name: "{app}\plugins"

[Run]
Filename: "{app}\Foo.exe"; WorkingDir: "{app}"; Flags: nowait postinstall

1 个答案:

答案 0 :(得分:17)

虽然可以在升级之前运行卸载,但不建议这样做。

相反,您应该使用[InstallDelete]条目删除现在多余的特定文件。你应该知道它们是哪些文件。

[InstallDelete]
Type: files; Name: {app}\foo.bar
Type: files; Name: {app}\baz\quux.txt

虽然可以使用通配符,但不建议这样做(特别是不能忽略文件扩展名的通配符),因为它可能会无意中删除用户文件,尤其是{app}出现意外情况时(可能是直接安装到Windows中)文件夹)。

关于你的第二个断言,那个"当卸载更新的安装时,旧安装的文件将不会被删除。",这简直是不真实的。只要保持AppId和目标文件夹相同,即使更新后,卸载也会卸载以前安装的所有文件。您应该使用以下设置来帮助确保这一点:

[Setup]
DisableDirPage=auto

此外,如果您尚未发布此应用程序,则应考虑将其DefaultDirName更改为{userpf}\YourAppName;这是安装每用户应用程序的更好位置。 (如果您已经发布了应用程序,只要您不更改AppId,更改此值仍然是安全的,但您必须记住旧版安装将留在旧路上。)