0

我有一个可执行文件,默认情况下通过 InnoSetup 安装到 Program Files\FolderName 中。exe 有一个 3rd 方组件,它可以在线检查新版本并下载它们,然后做一些摆弄来替换 exe - 简单的东西。问题是,它不能在 Program Files 中执行此操作,因为那里有必要的安全性。我正在阅读Windows 7 - Can't update my program's files in C:\Program Files其中 David Hefferman 提供了一个解决方案,但似乎说这是一个坏主意 - 但我不知道这个坏主意是否是指他的解决方案或OP的评论!

那么程序可以自我更新的首选方法是什么?适用于 XPSP3 到 Win8 的一种。我似乎无法找到正确的短语来输入 Google 以提供相关结果。为简单起见,暂时忽略数字签名等。

(请注意,我的措辞可能看起来像是一个意见问题,但事实并非如此 - 必须有一些我找不到的 MS 认可的方法。FWIW 这是一个 Delphi 程序,但任何 Win32 笔记都可以)

4

3 回答 3

1

该第 3 方更新实用程序需要以管理权限运行,您可以通过编程方式实现。

在 Program Files 中安装应用程序没有任何问题,这是该文件夹的指定用途。但是,应用程序使用的用户数据应存储在不同的位置。

但是,您运行该第 3 方实用程序时,应首先检查 Windows 操作系统版本以查看是否真的需要摆弄 UAC(Vista+...),然后在提升状态下运行该实用程序。

于 2013-07-05T17:32:35.310 回答
0

他说,摆弄您的系统以便普通用户可以在“程序文件”中写入是“非常糟糕的做法”。

如果您的程序位于“程序文件”中,则它以系统管理员权限安装。因此,还需要使用系统管理员权限安装更新。

您可以将 InnoSetup 配置为请求管理员权限,以便您可以写入“程序文件”,但如果第 3 方组件不这样做,最好将所有内容安装在其他目录中。

即 C:\Your_Program

这样你的 3rd 方组件就可以在那里写。

于 2013-07-05T17:22:40.580 回答
-1

这里有几个选项:

  • 最简单的:将更新程序作为带有清单的单独程序,这需要管理员权限。您还可以在启动更新程序时要求管理员权限。或者您可以将更新程序移动到进程外 COM 对象中,而不是单独的 exe。
  • 您可以在安装程序期间创建具有管理员权限的隐藏用户。然后,您将使用该用户的凭据运行更新程序。
  • 您可以在安装程序的过程中安装系统服务,该服务将从系统帐户运行。因此,您的更新程序将作为服务实现。
于 2013-07-06T10:54:42.717 回答