3

我正在创建一个自我更新的应用程序,我在 Vista 和 Windows 7 上遇到的一个问题是需要具有管理员权限才能更新客户端。我遇到了客户端的问题,他们的用户在受限权限下运行,他们必须让 IT 登录到每台需要更新客户端的机器上,因为用户无法这样做。

我正在考虑的一个可能的解决方法是将启动器应用程序正常安装到 Program Files 中,并将它更新的真实应用程序安装在用户文档中的某个位置,以便他们可以更新和运行新版本而无需 IT 参与。

我想知道我在这里遗漏了哪些潜在的陷阱,或者在沿着这条道路前进之前我应该​​注意什么。我知道 click-once 做了非常相似的事情,我会使用它,除了我需要能够进行静默更新,而无需任何用户交互。

4

5 回答 5

1

这就是它应该的样子。大多数 IT 部门最不想要的就是用户随机更新一个软件。这可能会产生各种无意的副作用,例如与旧版本的文件不兼容、新的和可能不安全的功能等。这就是 IT 部门禁用 Windows 更新并以受控方式手动执行更新的原因。

如果用户想要更新版本的软件,他们应该向 IT 部门提出请求。这些计算机和基础设施不属于他们,他们只是从他们工作的公司借用时间,以便他们可以完成他们的工作。

于 2009-05-25T04:48:53.613 回答
1

只安装一个程序有问题吗?例如,它是否特别大?

您是否需要管理员权限才能运行您的程序?

如果没有,您可能不需要 Program Files 文件夹。

我建议您完全放弃安装到 Program Files,只需将您的程序安装到用户的文件夹系统中<userfolder>\AppData\ProgramName

如果您碰巧使用 .NET,请查看ClickOnce 部署机制。它有一个很棒的自我更新功能,可能会让你的生活更轻松。

编辑:刚刚看到你的最后一句话。ClickOnce 可以强制用户更新。

于 2009-05-25T04:57:44.743 回答
1

有几件事:

如果您决定将您的应用程序移动到文档中的某个位置,请确保您的应用程序将数据透明地写入您的程序安装位置,例如,如果代码中的任何位置存在指向错误位置的硬编码路径。也许这对您来说不是问题,但可能需要牢记。

当我们决定实现“实时更新”功能时,我们以几乎相同的方式解决了这个问题。但是我们安装了一个以管理员权限运行的服务。一旦程序需要更新,该服务又可以运行安装程序。使用这种类型的解决方案,您甚至不必将您的应用程序移出程序文件。

干杯!

编辑:

以管理员身份运行服务的另一件好事。是你可以创建一个命名管道通信并让它为你做事,就像你不能作为一个普通用户做的那样。

于 2009-05-25T05:28:19.790 回答
0

加载程序存根是一个很好的方法。唯一的问题是当你必须更新加载器时;同样的初始问题也适用(尽管这应该很少见)。

我能想到的一个问题是,你正在超越让事情更“安全”的整个想法。由于您的可执行文件存在于非管理员应该可以完全访问的位置,因此其他东西可能会破坏您的 exe 从而破坏安全性。

于 2009-05-25T04:47:37.750 回答
0

您可能可以利用AppLocker。虽然我不再运行 Vista,但它可能只适用于 Win7。;)

于 2009-05-29T07:03:50.607 回答