我正在使用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
答案 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
,更改此值仍然是安全的,但您必须记住旧版安装将留在旧路上。)