Inno setup Inno安装程序应该在更新时删除旧文件吗?

Inno setup Inno安装程序应该在更新时删除旧文件吗?,inno-setup,Inno Setup,我正在使用Inno安装程序安装和更新我的python应用程序 更新时,安装程序不会从以前的安装中删除py文件,这会产生两个问题: 我正在使用插件:如果我在新版本中删除了插件,它仍然存在,供执行更新的用户使用 卸载更新的安装时,不会删除旧安装中的文件。(无法复制…) 如何在升级之前强制Inno安装程序卸载我的应用程序 这是我的剧本: [Setup] AppName=Foo AppVersion=0.1 PrivilegesRequired=lowest AppId=FooID RestartI

我正在使用Inno安装程序安装和更新我的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

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


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

[InstallDelete]
Type: files; Name: {app}\foo.bar
Type: files; Name: {app}\baz\quux.txt
虽然可以使用通配符,但不建议使用通配符(尤其是忽略文件扩展名的通配符),因为它可能会无意中删除用户文件,特别是当
{app}
出现意外情况时(可能是直接安装到Windows文件夹中)

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

[Setup]
DisableDirPage=auto

此外,如果尚未发布此应用程序,则应考虑将其<代码> Debug TrimeNe>代码>改为<代码> {USPPF}\ YouAppNeX/CODE >;这是安装每个用户应用程序的更好位置。(如果您已经发布了应用程序,只要您不更改

AppId
,更改此值仍然是安全的,但您必须记住,较旧的安装将保留在较旧的路径上。)

感谢您提供详细的答案。你是对的,我无法重现我的第二个问题,所以这可能是我的错。“你应该知道这些文件是什么”通常是不实际的。