0

我知道有很多关于如何在 .NET 应用程序中实现自动更新的问题,而且我可能已经阅读了其中的大部分。不幸的是,据我所知,我所看到的没有一个非常适合我的情况。

我正在尝试构建一个自我更新的 .NET 应用程序,该应用程序将在用户帐户有限的环境中运行。这里没有管理员权限。该应用程序必须在 Vista 和 XP 上运行,并且可能在 Win 7 上运行。X-copy 部署会很好。我不希望使用点击一次

到目前为止,我已经尝试了一个系统,应用程序检查清单并下载更新的二进制文件,这在开发中效果很好,但在安装应用程序时效果不佳。Vista 拒绝让我将文件复制到 Program Files。之后,我尝试下载更新的 .msi,除了 MSI 有 UAC 提示之外,它可以工作——如果用户没有具有本地管理员权限的帐户,则不行。

一些帖子建议在 AppData 中运行程序并使用 x-copy 方法可能有效,但我没有看到有人说他们已经尝试过并且确实有效。这适用于没有管理员权限的帐户吗?在我开始编写更多代码之前,谁能保证这种方法?

4

2 回答 2

3

您只需要确保您正在“安装”(即复制到)非特权用户可以访问的位置。

Program Files 没有什么神奇之处,只是非特权用户无法写入(默认情况下)。

如果您有管理员进行初始安装,那么您可以更改程序文件文件夹的权限,以便后续升级可以覆盖这些文件。但这并不真正符合事物的精神。

ClickOnce 的主要缺点是不常见的安装位置和原始安装程序 - 如果您无论如何都要对某个奇怪的地方进行 xcopy,那么您已经拥有了 ClickOnce 已经令人讨厌的大部分内容,而没有任何优点。

于 2009-04-16T22:28:43.410 回答
1

虽然相当复杂,但一种可行的策略是创建一个作为本地系统运行的 Windows 服务。以管理用户身份安装一次,然后让此服务下载您的更新并将它们复制到程序文件目录。

您可能还需要制作某种用户界面来显示更新过程中的进度和状态。通过 WCF 服务等很容易公开它。

于 2015-04-09T15:54:35.227 回答