.NET - 启用UAC时,应用程序如何自行更新(Windows7/Vista)?

m-y*_*m-y 3 .net windows-installer uac windows-vista windows-7

这是场景:

我编写了一个应用程序并从Visual Studio Installer项目创建了一个安装程序(我生成了一个MSI文件).我以管理员身份将应用程序安装到Program Files目录中.

当用户使用该应用程序时,我希望它能够自动更新(不需要打扰管理员).现在,Windows 7和Windows Vista都有UAC来保护Program Files目录.所以,我不确定从哪里开始.

我想我读过某个地方,ClickOnce能够安装应用程序的更新,而不会打扰用户获得管理权限.

  1. 有没有可以帮助自动更新的应用程序?
  2. 如果有类似的应用程序,他们如何能够绕过提升的权限?基本上,不可能以某种方式复制这些应用程序在.NET(C#)中的作用吗?

我真的只是希望有一种简单的方法来使用MSI文件进行静默更新,因为我不希望普通用户拥有管理访问权限,我不希望管理员对此任务感到困扰.此外,显然事情不能硬编码,因为用户名和密码很容易改变.

gal*_*ets 6

你可以做的一件事当然是创建一个作为localsystem运行的更新服务.这个肯定会绕过UAC.

另一个选择(因为安装服务可能被视为过于侵入)是安排任务,再次通过W7任务调度程序作为本地系统运行.

在任一情况下,这必须在安装期间完成,否则UAC将再次被触发.

编辑:我只想到另一种处理方式:你可以做Chrome风格.不要在程序文件中安装任何东西,将所有应用程序二进制文件和数据保存在用户文件夹 这样您就可以只使用用户级权限进行升级,而不会触发UAC

  • 实际上chrome不再安装到appdata中,它会安装到程序文件中,并且仍然能够自动更新自己. (2认同)

Zip*_*pyV 6

如果使用相同的数字证书对安装程序和更新包进行签名,则可以使用MSI更新应用程序而无需管理员权限.

这称为UAC修补.是MSDN上的相关页面.

  • @Helge Klein:http://msdn.microsoft.com/en-us/library/aa372388(v = VS.85).aspx (3认同)