2014-01-07 95 views
0

我做了一個應用程序,該應用程序根據文件夾中當前版本的.exe文件從網絡服務器上下載文件,它具有所有檢查和一切工作正常,但我需要一種方法使其停止並等到文件提取完成後,對於慢速PC和/或大文件的情況,這怎麼可能?我也想在提取完成後刪除文件。C#等待文件提取

使用winrar sfx compression進行提取,然後文件由應用程序下載並在之後啓動。

在此先感謝。 下面是代碼,請注意,這是我第一次使用網絡工作,而且我仍然自學,所以如果有任何問題,請留意我的意思。

private void Completed(object sender, AsyncCompletedEventArgs e) 
{ 
    Process.Start("update.exe"); 
} 

private void downloadfile(string filenumber) 
{ 
    MessageBox.Show("Download working"); 

    WebClient webClient = new WebClient(); 
    webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed); 
    webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged); 

    webClient.DownloadFileAsync(new Uri("http://127.0.0.1/Update/update"+filenumber+".exe"), @"update.exe"); 

    label1.Text = "Downloading Update" + filenumber + "..."; 
    string filepath = "http://127.0.0.1/Update/update"+filenumber+".exe"; 

    webClient.OpenRead(filepath); 

    Int64 bytes_total = Convert.ToInt64(webClient.ResponseHeaders["Content-Length"]); 
    string updatelength = Convert.ToString((bytes_total/1024).ToString()); 
    label2.Text = updatelength + "KB"; 
} 
+11

你如何進行提取? – CodeCaster

+0

查看並行任務庫http://msdn.microsoft.com/en-us/library/dd537609(v=vs.110).aspx。也許使用Task.WaitAll – reggaeguitar

+0

我使用winrar壓縮文件,使它們在後臺自動運行並通過C#自動啓動文件。 –

回答

1

你可以做到以下幾點:

Process proc = Process.Start("update.exe", "-s"); // extract in the silent mode 
proc.WaitForExit(); 
File.Delete("update.exe"); 
+0

非常感謝,效果很棒! 當我有更多的空閒時間時,我仍會看看圖書館,謝謝大家。 –

0

方法一: 只要檢查SFX EXE線程是否仍在運行。快速的解決辦法是

process.WaitForExit(); 

方法二:使用 UND的RAR解壓SFX,並檢查文件是否仍然訪問(阻止)定期。

但我會嚴格推薦使用rar庫。所以,你不依賴於RAR的具體安裝(甚至可能會隨操作系統而定)

以下庫似乎滿足您的需求:http://nunrar.codeplex.com/

圖書館不應該關心它是否是一個「真正的「RAR或SFX文件