C# 关于在C语言中为应用程序编写后台/自动/静默下载程序/安装程序的问题#
背景:C# 关于在C语言中为应用程序编写后台/自动/静默下载程序/安装程序的问题#,c#,download-manager,silent-installer,C#,Download Manager,Silent Installer,背景: 我有一个主应用程序,它需要能够访问web并下载与其相关联的DLL文件(我们编写的、位于服务器上的DLL文件)。它确实需要能够将这些DLL文件下载到“C:\Program files\”中的应用程序文件夹中。在过去,我使用System.Net.WebClient从网上下载我想要的任何文件 问题 过去我在下载数据和保存到用户硬盘上的文件时遇到了很多麻烦。我收到许多用户的报告说,这不起作用,通常是因为程序中的用户权限问题 在程序用户权限出现问题的情况下,每个用户都可以访问web上的确切文件位置
我有一个主应用程序,它需要能够访问web并下载与其相关联的DLL文件(我们编写的、位于服务器上的DLL文件)。它确实需要能够将这些DLL文件下载到“C:\Program files\”中的应用程序文件夹中。在过去,我使用
System.Net.WebClient
从网上下载我想要的任何文件
问题过去我在下载数据和保存到用户硬盘上的文件时遇到了很多麻烦。我收到许多用户的报告说,这不起作用,通常是因为程序中的用户权限问题 在程序用户权限出现问题的情况下,每个用户都可以访问web上的确切文件位置,下载文件,然后手动将其保存到正确的位置 我希望它能像我在这个版本中看到的所有其他下载/安装程序一样工作(即Firefox Pluign更新、Flash Player、JAVA、Adobe Reader等)。所有这些工作都顺利进行 问题
是否需要使用一些代码来授予我的下载程序对program Files文件夹的特殊权限?我能这样做吗?有没有更好的课程或图书馆我应该使用?我应该采用不同的方法下载文件,例如使用线程或其他方法下载数据吗 这里的任何帮助都是感激的。如果可能的话,我想尽量远离第三方应用程序/库,当然,由于许可问题,微软除外,但我仍然会以我的方式发送任何建议
同样,其他程序似乎已经解决了权限问题和下载功能。我想要同样的功能。写入程序文件目录需要Vista/Win7上的UAC提升(如果用户已启用)。有关如何提示用户输入权限,请参见此代码示例:
确实如此,请考虑设计您的应用程序,使其写入到更合适的位置,这样就不会有意外覆盖关键程序文件的风险。试试看。非常成功的Mac Sparkle框架的一个端口。查看BITS服务: 不要这样做 理论上这很容易做到。您只需使用另一个应用程序,该应用程序以管理权限运行-您可以在配置中请求这些权限。在updater应用程序中,您只需连接到安全(ssl)网站,下载所需的一切,下载的文件必须经过加密签名 使用ClickOnce或其他能够更新的web安装程序也可以轻松解决此问题
您不应该只从未经验证的源下载不安全的DLL并执行它们。它真的需要在程序文件中吗?我在一个应用程序中遇到了类似的问题,我们编写了一个类来解析未安装的程序集,方法是首先尝试从%usersprofile%的子文件夹中加载程序集,然后尝试下载。如果将resolve方法添加到当前应用程序域的AssemblyResolve事件中,这将是无缝的
AppDomain.CurrentDomain.AssemblyResolve+= AssemblyResolve;
public Assembly AssemblyResolve(object sender, ResolveEventArgs args)
{
//try to get locally
//try to download
return assembly;
}
通常的做法如下:
System.Net.WebClient
。应用程序清单将确保它请求写入程序文件所需的预许可
请注意,此问题(程序文件
不可由管理员在没有UAC提升的情况下写入)是一个操作系统功能,而不是编程语言限制,因此您不会仅通过“使用其他库”来解决此问题。如果您希望应用程序在Vista/Win7上运行并写入程序文件
,则需要UAC升级。是的。。。这是一个好问题。在Mac电脑上,我会使用Sparkle,但我很好奇是否有类似于为.NET开发的东西。在这种情况下,单击一次是最好的选择。按一下就可以了。每次应用程序启动时,它都会检查服务器是否有更新,并自动更新应用程序或文件。@Shiv:ClickOnce不会安装到程序文件中,即它只为当前用户安装应用程序。Adobe Reader和JAVA等程序将文件安装到哪里?我想他们下载了文件并安装到了“程序文件”中的文件夹中。啊,对不起,我以为你在下载文件。对于为您自己的应用下载DLL,程序文件很有意义。这里的重要一课是从完全启用UAC的非管理员帐户进行开发(或至少测试)。您可以下载DLL的另一个位置是%AppData%的子文件夹。但是,这些信息是特定于您的用户配置文件的。+1对于“是操作系统功能,而不是编程语言限制”,我对此进行了大量研究,这是最好和最广泛使用的方法。