C#System.ComponentModel.Win32Exception

时间:2018-03-11 07:05:53

标签: c# win32exception

我一直试图从网站下载程序,然后运行该程序。当我运行它时,我得到以下异常。我是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”),程序将会运行;

2 个答案:

答案 0 :(得分:1)

代码有问题。首先使用DownloadFileAsync(如它所说)在后台下载。该代码没有得到任何确认文件已被下载的确认 - 它只是睡了1秒钟并且希望'那就足够下载文件了。

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

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

答案 1 :(得分:0)

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