0

我一直在尝试从网站下载一个程序,然后运行该程序。当我运行它时,我得到以下异常。我是 C# 新手,所以请使用简单的语言。

System.ComponentModel.Win32Exception:“该进程无法访问该文件,因为它正被另一个进程使用”

没有其他进程正在使用该程序,应该可以正常运行。

        if (restart == "1")
        {
            wc.DownloadFileCompleted += new 
            AsyncCompletedEventHandler(FileDowloadComplete);
            Uri imageurl = new Uri(Website);
            System.Threading.Thread.Sleep(1000);
            wc.DownloadFileAsync(imageurl, "Example.exe");
            System.Threading.Thread.Sleep(1000);
            System.Diagnostics.Process.Start("Example.exe");
            System.Threading.Thread.Sleep(1000);
        }

下载工作正常,如果我注释掉 wc.DownloadFileAsync(imageurl, "Example.exe"); 程序将运行。

4

2 回答 2

1

代码有问题。首先它使用 DownloadFileAsync (如它所说)在后台下载。该代码没有得到文件已下载的任何确认 - 它只是休眠 1 秒并“希望”有足够的时间下载文件。

该代码确实注册了 FileDownloadComplete 回调,但您没有在示例中包含该回调的代码;它很可能是您错误的根源。你能发布完整的例子吗?

因为当您注释掉 DownloadFileAsync 时,您说您的程序运行良好,您的磁盘上必须已经存在 Example.exe 的副本。DownloadFileAsync 将覆盖现有文件 - 但前提是它未锁定。发生的事情是 1 秒的睡眠时间不足以完成下载;然后您的程序启动现有的 Example.exe 并将其锁定,然后 DownloadFileAsync 完成并尝试将临时下载的文件复制到您已经在运行并处于锁定状态的现有 Example.exe 的顶部。

于 2018-03-11T07:52:56.013 回答
0

正在写入 Example.exe。要停止错误,请让程序等待 Example.exe 完成下载。

于 2018-03-11T07:59:35.233 回答