C# System.ComponentModel.Win32Exception

C# System.ComponentModel.Win32Exception

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

System.ComponentModel.Win32Exception: 'The process cannot access the file because it is being used by another process'

没有其他进程正在使用此程序,应该 运行 没问题。

        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");

,程序将 运行

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

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

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

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