在没有管理员权限的情况下自动更新我的.NET应用程

时间:2009-04-16 22:09:20

标签: c# vb.net auto-update

我知道有很多关于如何在.NET应用程序中实现自动更新的问题,我可能已经阅读了大部分内容。不幸的是,就我所知,我所看到的并非完全符合我的情况。

我正在尝试构建一个自我更新的.NET应用程序,该应用程序将在具有有限用户帐户的环境中运行。这里没有管理员权限。该应用程序必须在Vista和XP上运行,并且可能在Win 7出现时运行。 X-copy部署没问题。我宁愿不使用click-once

到目前为止,我已经尝试了一个系统,其中应用程序检查清单并下载更新的二进制文件,这在开发中非常有用,但在安装应用程序时却没有那么多。 Vista拒绝让我将文件复制到Program Files。之后,我尝试下载更新的.msi,除了MSI有UAC提示外,其他方法都有效 - 如果用户没有具有本地管理员权限的帐户,请不要去。

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

2 个答案:

答案 0 :(得分:3)

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

除了非特权用户无法写入(默认情况下)之外,程序文件没有任何魔力。

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

ClickOnce的主要缺点是不常见的安装位置和原始安装程序 - 如果你要将xcopy做到奇怪的地方,那么你已经有很多关于ClickOnce的东西,没有任何优势。

答案 1 :(得分:1)

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

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