Inno设置:安装程序可以自行更新吗?

时间:2015-11-18 14:21:51

标签: inno-setup

我的安装程序使用我的应用程序和安装程序本身创建一个文件夹。稍后,安装程序将用作应用程序的更新程序。

所有这些都运行良好,但我想更新安装程序本身,而不仅仅是我的应用程序。

我从我的服务器下载一个zip,并希望zip中的所有内容都覆盖app文件夹中的所有内容(包括安装程序本身)。 每次运行安装程序时,都会收到一个文件已被使用的错误。

安装程序可以自行更新吗?

2 个答案:

答案 0 :(得分:1)

您无法替换正在运行的应用程序。

您有以下选择:

  • 通过批处理文件启动“更新程序”(参考“开始”菜单中的更新程序的假设快捷方式或任何其他调用方法),将安装程序的副本复制到临时位置并从那里运行更新程序。更新时,请更新原始副本。
  • 要避免批处理文件(以及令人不快的控制台窗口),您可以使用JScript。甚至让安装程序(更新程序)自己执行此操作(创建自身的副本,启动副本,退出自身)。
  • 使用restartreplace flag in Files section entry为下次Windows启动安排安装程序/更新程序替换。

答案 1 :(得分:0)

将安装程序保留在 {app} 目录中对于小型应用程序可能是可接受的,对于较大的应用程序,可以考虑使用updater,甚至是其他位置(以功能请求的形式) ) {备份} 以引用某些闪存或可移动驱动器上的路径。

{app} 目录运行设置,在version check之后,将安装程序下载到 {tmp} 文件夹。
quitting之前执行安装程序,记住脚本代码部分中可能的mutex条件:

if Exec(ExpandConstant('{tmp}\{OutputBaseFilename}), '', '', SW_SHOW,
 ewNoWait, ResultCode) then
// success/fail code follows

copy the installer back to {app}安装脚本将在文件中包含此内容:

[Files]
Source: "{srcexe}"; DestDir: "{app}"; Flags: external

当安装程序 实际从 {app} 运行时,上述行不会产生错误。

然后,要清理,下次从 {src} (= {app} )目录运行安装程序时,可以从带有

{tmp} 目录
DeleteFile({tmp}\{OutputBaseFilename})