关于在C#中为应用编写后台/自动/静音下载器/安装程序的问题

Mik*_*ebb 12 c# download-manager silent-installer

背景:
我有一个主应用程序,需要能够访问Web并下载与之关联的DLL文件(我们编写的文件,位于我们的服务器上).它确实需要能够将这些DLL文件下载到"C:\ Program Files \"中的应用程序文件夹中.在过去,我曾经习惯System.Net.WebClient从网上下载我想要的任何文件.

问题
我在过去下载数据并保存到用户硬盘上的文件时遇到了很多麻烦.我收到许多用户的报告说这不起作用,这通常是因为程序中的用户权限问题.

在程序用户权限出现问题的情况下,每个用户都可以转到Web上的确切文件位置,下载它,然后手动将其保存到正确的位置.

我希望这个工作像我见过的所有其他程序一样下载/安装(即Firefox插件更新,Flash Player,JAVA,Adobe Reader等).所有这些都顺利完成.

问题
我是否需要使用一些代码来为我的下载程序提供Program Files文件夹的特殊权限?我甚至可以这样做吗?我应该使用更好的课程或图书馆吗?是否有不同的方法来下载我应该采取的文件,例如使用线程或其他东西来下载数据?

任何帮助在这里表示赞赏.我想尝试远离第三方应用程序/库,如果可能的话,除了微软当然,由于许可问题,但仍然以我的方式发送任何建议.

同样,其他程序似乎也有权利问题和下载能力.我想要同样的能力.

Hei*_*nzi 2

通常的方法是这样的:

  1. 您的应用程序检测到需要更新。
  2. 您的应用程序启动另一个(更新程序)应用程序,该应用程序将下载所需的文件并将其安装到Program Files. 此更新程序应用程序必须以管理权限运行(即,在 Vista/Win7 中提示 UAC 提升)。确保这一点的最简单方法是将应用程序清单添加到该更新程序应用程序中

如果用户是启用了 UAC 的管理员,第 2 点将导致出现 UAC 提示,必须接受该提示(请注意,对于 Firefox/Acrobat/等更新程序也是如此)。如果用户不是管理员,系统会要求他提供管理员凭据。(请注意,这是一件好事:只有管理员才有权升级为所有用户安装的应用程序。)

您的更新程序应用程序不需要以特殊方式编写:它可以System.Net.WebClient像以前一样使用。应用程序清单将确保它请求写入所需的权限Program Files

请注意,此问题(Program Files未经 UAC 提升,管理员无法写入)是操作系统功能,而不是编程语言限制,因此您不能仅通过“使用不同的库”来解决此问题。如果您希望应用程序在 Vista/Win7 上运行并写入Program Files,则需要UAC 提升。