xnooztv | Bonjour, Voila, je suis sur la création d'un launcher et je souhaite dézippé le fichier dans le dossier ou se trouve le launcher. Mon launcher récupère un fichier de configuration sur mon site, voici le fichier conf.txt:
http://lsl-rp.ga/landwars/update/version.txt http://lsl-rp.ga/landwars/update/maj.zip DOSSIER_LORS_DU_DEZIP |
Donc, quand mon launcher dézip le fichier maj.zip, il crée un dossier "DOSSIER_LORS_DU_DEZIP" et les fichiers sont dedans. Mais, je souhaiterais dézippé maj.zip dans le dossier ou se trouve mon launcher. Voici mon code:
Code :
- using ICSharpCode.SharpZipLib.Zip;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Diagnostics;
- using System.IO;
- using System.Linq;
- using System.Net;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- namespace Launcher
- {
- /// <summary>
- /// Logique d'interaction pour MainWindow.xaml
- /// </summary>
- enum UpdateState { search, available, download, update };
- public partial class MainWindow : Window
- {
- private string m_confUrl = "http://lsl-rp.ga/landwars/update/conf.txt";
- //Variable de configuration
- string m_versionUrl = null, m_zipUrl = null, m_unziPath = null;
- private UpdateState m_updateState;
- public MainWindow()
- {
- InitializeComponent();
- m_updateState = UpdateState.search;
- //Si l'évenement this.Close() est appeler.
- this.Closing += delegate
- {
- if (m_updateState == UpdateState.download) //Si le téléchargement est en cours.
- {
- if (MessageBox.Show("Le téléchargement sera annuler si vous quittez.", "Voulez vous quitter ?", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
- {
- this.Close();
- }
- }
- };
- //Téléchargement du fichier de configuration
- WebClient request = new WebClient();
- request.DownloadFile(m_confUrl, "Landwars_Data/conf.txt" );
- //Lecture du fichier
- StreamReader initReader;
- initReader = new StreamReader("Landwars_Data/conf.txt" );
- string lineRead = initReader.ReadLine();
- if (lineRead != null)
- {
- string[] settingLine = lineRead.Split(' ');
- m_versionUrl = settingLine[0];
- m_zipUrl = settingLine[1];
- m_unziPath = settingLine[2];
- }
- else
- MessageBox.Show("Erreur: Fichier de configuration illisible", "ERREUR", MessageBoxButton.OK, MessageBoxImage.Stop);
- initReader.Close();
- //Vérification de la version, mise à jour ou non.
- if (File.Exists("Landwars_Data/version.txt" )) // Voir si le fichier version.txt existe sur l'ordinateur.
- {
- Stream data = request.OpenRead(m_versionUrl); // Lire la version en ligne du version
- StreamReader reader = new StreamReader(data);
- string onlineVersion = reader.ReadLine();
- reader.Close();
- StreamReader localVersionStream;//Local
- localVersionStream = new StreamReader("Landwars_Data/version.txt" );
- string localVersion = localVersionStream.ReadLine();
- localVersionStream.Close();
- if (onlineVersion == localVersion) //Si il existe, vérifier que le client est à jour
- {
- //Tout est à jour
- m_updateState = UpdateState.update;
- }
- else
- {
- //Mise à jour
- m_updateState = UpdateState.available;
- Download();
- }
- }
- else //Si il n'existe pas, alors mise à jour.
- {
- //Mise à jour
- m_updateState = UpdateState.available;
- Download();
- }
- }
- //Update
- private bool Download()
- {
- if (m_updateState == UpdateState.available)
- {
- m_updateState = UpdateState.download;
- Play.Content = "Mise à jour en cours ..."; //On change le texte
- Play.Margin = new Thickness(304, 104, 0, 0);
- WebClient webClient = new WebClient();
- webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
- webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
- webClient.DownloadFileAsync(new Uri(m_zipUrl), "maj.zip" );
- }
- return true;
- }
- private void Completed(object sender, AsyncCompletedEventArgs e)
- {
- Play.Margin = new Thickness(602, 104, 0, 0);
- Play.Content = "Jouer";
- if (Directory.Exists(m_unziPath)) //On supprime l'ancienne version.
- {
- string[] filePaths = Directory.GetFiles(m_unziPath);
- foreach (string filePath in filePaths)
- File.Delete(filePath);
- }
- Decompress("maj.zip", m_unziPath, true);
- //Mettre à jour le version.txt local
- WebClient webClient = new WebClient();
- webClient.DownloadFile(new Uri(m_versionUrl), "Landwars_Data/version.txt" );
- m_updateState = UpdateState.update;
- }
- private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
- {
- Play.Content = "Mise à jour en cours (" + e.ProgressPercentage + "%)";
- }
- //Button Event
- private void OfficialWebSite_Click(object sender, RoutedEventArgs e)
- {
- Process.Start("https://minecraft.net/" );
- }
- private void Exit_Click(object sender, RoutedEventArgs e)
- {
- this.Close();
- }
- private void Play_Click(object sender, RoutedEventArgs e)
- {
- if(m_updateState == UpdateState.update)
- {
- //Lancement de votre exécutable
- System.Diagnostics.ProcessStartInfo start = new System.Diagnostics.ProcessStartInfo();
- start.FileName = ".exe";
- start.WorkingDirectory = m_unziPath;
- System.Diagnostics.Process.Start(start);
- }
- }
- //Unzip
- public bool Decompress(string source, string destinationDirectory, bool deleteOriginal = false)
- {
- //Ouverture d'un nouveau contexte ZipInputStream (Librairie)
- using (var zipStream = new ZipInputStream(File.OpenRead(source)))
- {
- ZipEntry entry = null;
- string tempEntry = string.Empty;
- while ((entry = zipStream.GetNextEntry()) != null)
- {
- string fileName = System.IO.Path.GetFileName(entry.Name);
- if (destinationDirectory != string.Empty)
- Directory.CreateDirectory(destinationDirectory);
- if (!string.IsNullOrEmpty(fileName))
- {
- if (entry.Name.IndexOf(".ini" ) < 0)
- {
- string path = destinationDirectory + @"\" + entry.Name;
- path = path.Replace("\\ ", "\\" );
- string dirPath = System.IO.Path.GetDirectoryName(path);
- if (!Directory.Exists(dirPath))
- Directory.CreateDirectory(dirPath);
- using (var stream = File.Create(path))
- {
- int size = 2048;
- byte[] data = new byte[2048];
- byte[] buffer = new byte[size];
- while (true)
- {
- size = zipStream.Read(buffer, 0, buffer.Length);
- if (size > 0)
- stream.Write(buffer, 0, size);
- else
- break;
- }
- }
- }
- }
- }
- }
- if (deleteOriginal)
- File.Delete(source);
- return true;
- }
- }
- }
|
Pour informations, j'ai déjà essayer de retirer "DOSSIER_LORS_DU_DEZIP" ou de le remplacer par un "/" ou un "\", mon launcher crash (ce que je comprend)
Je ne veux pas utiliser ClickOne.
Car enfaîte, je développe un jeu et mon launcher fera les mises à jours, et si j'utilise ClickOne, ce sera juste le launcher qui se mettra à jour (d'après ce que je sais, dites moi si je me trompe).
Si quelqu'un aurais une idée.. Cordialement. |