【问题标题】:.Net WebClient Fails Silently when Lacking Permissions.Net WebClient 在缺少权限时静默失败
【发布时间】:2012-04-06 21:10:39
【问题描述】:

WebClient 在被要求将文件下载到进程没有写入权限的文件夹时静默失败(不抛出异常):

using (WebClient webClient = new WebClient())
{
    webClient.DownloadFile(url, outputPath);
}
if (!File.Exists(outputPath)) logger.Warn("Could not download file.");

代码在本地服务下运行的 Windows 服务中以每分钟一次的循环运行,试图写入已删除权限的文件夹。在我恢复目标文件夹的适当权限的那一刻,下载开始成功。

这是一种已知行为吗?它是一个错误吗?检查输出文件的存在是否是确定 DownloadFile 是否成功的正确方法?

【问题讨论】:

    标签: .net webclient


    【解决方案1】:

    这是一种已知行为吗?

    没有。根据documentation

    在中间层应用程序中使用此方法时,例如 ASP.NET 页面,如果您使用的帐户是 应用程序执行没有权限访问该文件。

    因此,如果您运行此代码的帐户没有目标文件夹的写入权限,基本上您会遇到异常。


    这是一个错误吗?

    我不这么认为。


    检查输出文件是否存在是正确的方法 判断DownloadFile是否成功?

    不,因为如果您没有给定文件夹的权限,File.Exists 将返回 false,因为文档明确指出:

    如果调用者没有足够的权限来读取 指定文件,不抛出异常,方法返回false 不管路径是否存在。

    所以你可能搞砸了权限。例如,如果您对该文件夹有写权限但没有读权限,DownloadFile 将成功,但 File.Exists 将返回 false。

    【讨论】:

    • “因此,如果您运行此代码的帐户没有目标文件夹的写入权限,那么基本上您会得到一个异常。”...该服务作为本地系统运行,本地系统根本没有对该文件夹的权限,我也没有收到异常。
    • 我会尝试用一个独立的测试来重现这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 2021-04-25
    • 1970-01-01
    • 2021-01-01
    • 2020-09-19
    • 1970-01-01
    相关资源
    最近更新 更多