Autor Beitrag
Csharp-programmierer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Sa 16.04.16 18:50 
Hallo. Ich habe nun einen Lösungsansatz gefunden, wie ich meine Anwendung automatisch updaten kann. Auf meiner Website lade ich eine Datei mit der neuesten Version hoch. Bei jeden Programmstart wird diese Datei gedownloadedet und mit der aktuellen Version verglichen. Dann wird die neue Exe heruntergeladen.
So weit so gut. Jedoch kommt an folgender Stelle ein Fehler. Meine Vermutung ist, dass der WebClient einen Stream zurückgibt und die Datei deswegen nicht geöffnet werden kann:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
var s = Schuldenverwaltung.Öffnen();

            WebClient webclient = new WebClient();
            Uri uri = new Uri(@"http://mailet-software.weebly.com/uploads/7/2/0/5/72054763/version3.txt");
            webclient.DownloadFileAsync(uri, Path.Combine(Application.StartupPath, "Version.txt"));

            string VersionNumber = "";

                using (StreamReader file = new StreamReader(Path.Combine(Application.StartupPath, "Version.txt")))
                {
                    VersionNumber = file.ReadToEnd();
                    file.Close();
                }


            if (VersionNumber != s.Version)
            {
                MessageBox.Show("Neues Update");
                s.Version = VersionNumber;
                s.Speichern();
            }


Die Fehlermeldung lautet: Der Prozess kann nicht auf die Datei "C:\Users\Yannic M.\documents\visual studio 2013\Projects\Downloader\Downloader\bin\Debug\Version.txt" zugreifen, da sie von einem anderen Prozess verwendet wird.

Ich habe es nach webclient.DownloadFileAsync(uri, Path.Combine(Application.StartupPath, "Version.txt")); mit webclient.CancelAsync(); versucht, jedoch wird dann keine Datei erstellt.

Die Datei von meiner Website: mailet-software.weebly.com/neue-seite.html
Wie kann ich diesen Fehler beheben?

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 16.04.16 19:00 
Ich würde vermuten, dass dadurch, dass Du eine asynchrone Methode für den Download benutzt, dieser noch läuft, während Du bereits wieder auf die Datei zugreifen willst.

Du musst also entweder im entsprechenden *Completed-Ereignis den Vergleich der Versionen durchführen, oder eine synchrone Methode für den Download verwenden oder die Methode DownloadFileTaskAsync im Zusammenspiel mit async und await.


//edit: Und bitte ändere den Titel dieses Themas, damit er aussagekräftiger ist!

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: So 17.04.16 18:35 
Ich würde die ganze Datei umgehen. Du liest die Datei ja eh direkt wieder ein, da kannst du dir den Umweg sparen.

Dann kannst du das auch gleich in einen String ziehen: Am besten mit HttpClient.GetStringAsync ( siehe msdn.microsoft.com/e...51746(v=vs.118).aspx)

Etwa so:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
public static async Task<string> GetVersionFromInternetAsync()
{
    var url = new Uri(@"http://mailet-software.weebly.com/uploads/7/2/0/5/72054763/version3.txt");
    using (var client = new HttpClient())
    {
        return await client.GetStringAsync(url);
    }
}