Inno Setup更新模式配置问题:如何仅更新EXE保留原有文件?
解决Inno Setup更新程序卸载全部文件的问题:仅更新EXE保留原始文件
问题核心在于,当两个Inno Setup安装包共用同一AppId时,更新程序默认会触发完整卸载旧版本的流程,导致主安装程序部署的DLL、字体等文件被删除。要实现仅更新EXE且保留其他原始文件,可通过以下配置修改:
1. 在更新程序的[Setup]段添加关键配置
禁用更新程序的卸载功能,跳过旧版本卸载流程:
#define MyAppVersion GetVersionNumbersString(AddBackslash(SourcePath) + "MyProg.exe") #define RegKey "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" #define RegKeyWOW6432="SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall" [Setup] AppVersion={#MyAppVersion} AppId={{xxxxxxxxxxx} ; 保持与主安装程序一致 Uninstallable=no ; 关键:阻止更新程序触发卸载旧版本
Uninstallable=no的作用是让更新程序仅执行文件复制逻辑,不会生成新的卸载条目,也不会卸载原有安装的文件。
2. 精简更新程序的[Files]段
确保更新程序的[Files]仅包含需要更新的EXE文件,避免引入其他无关文件:
[Files] Source: "MyProg.exe"; DestDir: "{app}"
如果需要强制覆盖(即使旧EXE版本更高),可添加Flags=ignoreversion:
[Files] Source: "MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
3. 版本号验证
确保更新程序中MyAppVersion获取的EXE版本号高于主安装程序部署的版本,这样Inno Setup会识别为合法升级,不会弹出“已安装更高版本”的提示。
效果说明
修改后运行更新程序时,只会将新的EXE覆盖到{app}目录,主安装程序创建的路径、注册的DLL、部署的TTF字体等所有原始文件都会被保留,同时主安装程序的卸载条目依然有效,用户可通过控制面板正常卸载整个产品。
内容的提问来源于stack exchange,提问作者Yako
相关产品推荐
相关产品推荐

