Linux: Support for auto updates (+ refactoring)

This commit is contained in:
Souryo 2016-12-22 19:39:33 -05:00
parent 4223566917
commit 8face6e666
11 changed files with 19 additions and 57 deletions

View file

@ -41,7 +41,7 @@
<Message ID="PatchAndReset">Patch and reset the current game?</Message>
<Message ID="SelectRomIps">Please select a ROM matching the IPS patch file.</Message>
<Message ID="UnableToDownload">Unable to download file. Check your internet connection and try again.&#xA;&#xA;Details:</Message>
<Message ID="UnableToStartMissingDependencies">Mesen must download and install the Microsoft Visual Studio 2015 runtime to continue. Would you like to automatically download the runtime from Microsoft's website and install it now?"</Message>
<Message ID="UnableToStartMissingDependencies">Mesen could not launch because it was unable to load MesenCore.dll due to missing dependencies.</Message>
<Message ID="UnableToStartMissingFiles">Mesen was unable to start due to missing files.&#xA;&#xA;Error: MesenCore.dll is missing.</Message>
<Message ID="UnexpectedError">An unexpected error has occurred.&#xA;&#xA;Error details:&#xA;{0}</Message>
<Message ID="UpdateDownloadFailed">Download failed - the file appears to be corrupted. Please visit the Mesen website to download the latest version manually.</Message>

View file

@ -511,7 +511,7 @@
<Message ID="PatchAndReset">¿Aplicar el parche y reiniciar el juego?</Message>
<Message ID="SelectRomIps">Elija la ROM que corresponde al archivo IPS seleccionado.</Message>
<Message ID="UnableToDownload">No se puede descargar el archivo. Compruebe su conexión a Internet e inténtelo de nuevo.&#xA;&#xA;Detalles del error:</Message>
<Message ID="UnableToStartMissingDependencies">Mesen debe descargar e instalar el paquete redistribuible de Visual C++ de Microsoft Visual Studio 2015 antes de poder continuar. ¿Le gustaría instalarlo ahora?</Message>
<Message ID="UnableToStartMissingDependencies">Mesen could not launch because it was unable to load MesenCore.dll due to missing dependencies.</Message>
<Message ID="UnableToStartMissingFiles">Mesen no puede iniciar debido a que faltan archivos.&#xA;&#xA;Error: No se encuentra el archivo MesenCore.dll.</Message>
<Message ID="UnexpectedError">Se ha producido un error inesperado.&#xA;&#xA;Detalles del error:&#xA;{0}</Message>
<Message ID="UpdateDownloadFailed">Error en la descarga - el archivo parece estar dañado. Por favor, visite el sitio web de Mesen para descargar manualmente la versión más reciente.</Message>

View file

@ -525,7 +525,7 @@
<Message ID="PatchAndReset">Appliquer la patch et faire un reset du jeu?</Message>
<Message ID="SelectRomIps">Choisissez un ROM qui correspond au fichier IPS choisi.</Message>
<Message ID="UnableToDownload">Impossible de télécharger le fichier. Vérifier votre connexion internet et essayez à nouveau.&#xA;&#xA;Détails de l'erreur:</Message>
<Message ID="UnableToStartMissingDependencies">Mesen doit télécharger et installer le package Redistribuable Visual C++ pour Microsoft Visual Studio 2015 avant de pouvoir continuer. Voulez-vous l'installer maintenant?"</Message>
<Message ID="UnableToStartMissingDependencies">Mesen n'a pas été en mesure de charger le fichier MesenCore.dll, et ne peut donc pas être lancé.</Message>
<Message ID="UnableToStartMissingFiles">Mesen est incapable de démarrer puisqu'il manque des fichiers.&#xA;&#xA;Erreur: Le fichier MesenCore.dll est introuvable.</Message>
<Message ID="UnexpectedError">Une erreur inattendue s'est produite.&#xA;&#xA;Détails de l'erreur :&#xA;{0}</Message>
<Message ID="UpdateDownloadFailed">Le téléchargement a échoué - le fichier semble être corrompu. Veuillez visiter le site de Mesen pour télécharger manuellement la version la plus récente.</Message>

View file

@ -507,7 +507,7 @@
<Message ID="PatchAndReset">IPSパッチを当てて、ゲームをリセットしますか</Message>
<Message ID="SelectRomIps">IPSファイルに合うゲームファイルを選んでください。</Message>
<Message ID="UnableToDownload">ファイルをダウンロードできませんでした。ネット接続を確認してから、再試行してください。&#xA;&#xA;エラーの詳細:</Message>
<Message ID="UnableToStartMissingDependencies">MesenはMicrosoft Visual Studio 2015のVisual C++再頒布可能パッケージなしではゲームをロードできません。 パッケージを自動的にMicrosoftのサーバからダウンロードして、インストールしますか</Message>
<Message ID="UnableToStartMissingDependencies">MesenはMesenCore.dllをロード出来なかったため、起動できませんでした。</Message>
<Message ID="UnableToStartMissingFiles">必要なファイルはロード出来なかったため、Mesenは起動できません。&#xA;&#xA;エラー: MesenCore.dllはロードできません。</Message>
<Message ID="UnexpectedError">予期しないエラーが発生しました。&#xA;&#xA;エラーの詳細:&#xA;{0}</Message>
<Message ID="UpdateDownloadFailed">ダウンロードは失敗しました。 Mesenのサイトに行って、新しいバージョンをダウンロードしてください。</Message>

View file

@ -511,7 +511,7 @@
<Message ID="PatchAndReset">Aplicar o patch e reiniciar o jogo?</Message>
<Message ID="SelectRomIps">Selecione a ROM que corresponde ao arquivo IPS selecionado.</Message>
<Message ID="UnableToDownload">Não foi possível baixar o arquivo. Verifique sua conexão com a internet e tente de novo.&#xA;&#xA;Detalhes do erro:</Message>
<Message ID="UnableToStartMissingDependencies">Mesen deve baixar e instalar o pacote redistribuível de Visual C++ de Microsoft Visual Studio 2015 antes de poder continuar. Gostaria de instalar agora?</Message>
<Message ID="UnableToStartMissingDependencies">Mesen could not launch because it was unable to load MesenCore.dll due to missing dependencies.</Message>
<Message ID="UnableToStartMissingFiles">Mesen não pode iniciar devido a falta de arquivos.&#xA;&#xA;Erro: Não se encontra o arquivo MesenCore.dll.</Message>
<Message ID="UnexpectedError">Houve um erro inesperado.&#xA;&#xA;Detalhes do erro:&#xA;{0}</Message>
<Message ID="UpdateDownloadFailed">Erro ao baixar - o arquivo parece estar danificado. Por favor, visite o site de Mesen para baixar manualmente a versão mais recente.</Message>

View file

@ -516,7 +516,7 @@
<Message ID="PatchAndReset">Пропатчить и сбросить текущую игру?</Message>
<Message ID="SelectRomIps">Пожалуйста выберите ROM соответствующий IPS.</Message>
<Message ID="UnableToDownload">Невозможно загрузить файл. Проверьте ваше соединение с интернетом и попробуйте ещё раз.&#xA;&#xA;Подробно:</Message>
<Message ID="UnableToStartMissingDependencies">Mesen должен загрузить и установить Microsoft Visual Studio 2015 runtime чтобы продолжить. Хотите автоматически загрузить Microsoft Visual Studio 2015 runtime с сайта Microsoft и установить его сейчас?"</Message>
<Message ID="UnableToStartMissingDependencies">Mesen could not launch because it was unable to load MesenCore.dll due to missing dependencies.</Message>
<Message ID="UnableToStartMissingFiles">Mesen не может запуститься из за отсутствующих файлов.&#xA;&#xA;Ошибка: MesenCore.dll не найден.</Message>
<Message ID="UnexpectedError">Неизвестная ошибка.&#xA;&#xA;Подробно:&#xA;{0}</Message>
<Message ID="UpdateDownloadFailed">Загрузка не удалась - файл повреждён. Пожалуйста посетите сайт Mesen и загрузите последнюю версию вручную.</Message>

View file

@ -515,7 +515,7 @@
<Message ID="PatchAndReset">Пропатчити і скинути поточну гру?</Message>
<Message ID="SelectRomIps">Будь ласка, оберіть ROM відповідний IPS.</Message>
<Message ID="UnableToDownload">Неможливо завантажити файл. Перевірте ваше з'єднання з інтернетом і спробуйте ще раз.&#xA;&#xA;Детально:</Message>
<Message ID="UnableToStartMissingDependencies">Mesen повинен завантажити та встановити Microsoft Visual Studio 2015 runtime щоб продовжити. Хочете автоматично завантажити Microsoft Visual Studio 2015 runtime з сайту Microsoft і встановити його зараз?"</Message>
<Message ID="UnableToStartMissingDependencies">Mesen could not launch because it was unable to load MesenCore.dll due to missing dependencies.</Message>
<Message ID="UnableToStartMissingFiles">Mesen не може запуститися через відсутні файли.&#xA;&#xA;Помилка: MesenCore.dll не знайдений.</Message>
<Message ID="UnexpectedError">Невідома помилка.&#xA;&#xA;Детально:&#xA;{0}</Message>
<Message ID="UpdateDownloadFailed">Завантаження не вдалася - файл пошкоджений. Будь ласка відвідайте сайт Mesen і завантажте останню версію вручну.</Message>

View file

@ -41,7 +41,7 @@ namespace Mesen.GUI.Forms
private void btnUpdate_Click(object sender, EventArgs e)
{
string destFilePath = Process.GetCurrentProcess().MainModule.FileName;
string destFilePath = System.Reflection.Assembly.GetEntryAssembly().Location;
string srcFilePath = Path.Combine(ConfigManager.DownloadFolder, "Mesen." + lblLatestVersionString.Text + ".exe");
string backupFilePath = Path.Combine(ConfigManager.BackupFolder, "Mesen." + lblCurrentVersionString.Text + ".exe");
string updateHelper = Path.Combine(ConfigManager.HomeFolder, "MesenUpdater.exe");
@ -54,7 +54,11 @@ namespace Mesen.GUI.Forms
if(frmDownload.ShowDialog() == DialogResult.OK) {
FileInfo fileInfo = new FileInfo(srcFilePath);
if(fileInfo.Length > 0 && GetSha1Hash(srcFilePath) == _fileHash) {
Process.Start(updateHelper, string.Format("\"{0}\" \"{1}\" \"{2}\"", srcFilePath, destFilePath, backupFilePath));
if(Program.IsMono) {
Process.Start("mono", string.Format("\"{0}\" \"{1}\" \"{2}\" \"{3}\"", updateHelper, srcFilePath, destFilePath, backupFilePath));
} else {
Process.Start(updateHelper, string.Format("\"{0}\" \"{1}\" \"{2}\"", srcFilePath, destFilePath, backupFilePath));
}
} else {
//Download failed, mismatching hashes
MesenMsgBox.Show("UpdateDownloadFailed", MessageBoxButtons.OK, MessageBoxIcon.Error);

View file

@ -24,53 +24,9 @@ namespace Mesen.GUI
if(!File.Exists("MesenCore.dll") && !File.Exists("libMesenCore.dll")) {
MesenMsgBox.Show("UnableToStartMissingFiles", MessageBoxButtons.OK, MessageBoxIcon.Error);
} else {
if(MesenMsgBox.Show("UnableToStartMissingDependencies", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) {
if(!RuntimeChecker.DownloadRuntime()) {
MesenMsgBox.Show("CouldNotInstallRuntime", MessageBoxButtons.OK, MessageBoxIcon.Error);
} else {
Process.Start(Process.GetCurrentProcess().MainModule.FileName);
}
}
MesenMsgBox.Show("UnableToStartMissingDependencies", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
return false;
}
private static bool DownloadRuntime()
{
string link = string.Empty;
if(IntPtr.Size == 4) {
//x86
link = "http://download.microsoft.com/download/C/E/5/CE514EAE-78A8-4381-86E8-29108D78DBD4/VC_redist.x86.exe";
} else {
//x64
link = "http://download.microsoft.com/download/C/E/5/CE514EAE-78A8-4381-86E8-29108D78DBD4/VC_redist.x64.exe";
}
string tempFilename = Path.GetTempPath() + "Mesen_VsRuntime2015.exe";
try {
frmDownloadProgress frm = new frmDownloadProgress(link, tempFilename);
if(frm.ShowDialog() == DialogResult.OK) {
Process installer = Process.Start(tempFilename, "/passive /norestart");
installer.WaitForExit();
if(installer.ExitCode != 0) {
MesenMsgBox.Show("UnexpectedError", MessageBoxButtons.OK, MessageBoxIcon.Error, installer.ExitCode.ToString());
return false;
} else {
//Runtime should now be installed, try to launch Mesen again
return true;
}
}
} catch(Exception e) {
MesenMsgBox.Show("UnexpectedError", MessageBoxButtons.OK, MessageBoxIcon.Error, e.ToString());
} finally {
try {
File.Delete(tempFilename);
} catch { }
}
return false;
}
}
}

View file

@ -38,7 +38,7 @@ namespace MesenUpdater
if(!isAdmin) {
ProcessStartInfo proc = new ProcessStartInfo();
proc.WindowStyle = ProcessWindowStyle.Normal;
proc.FileName = Process.GetCurrentProcess().MainModule.FileName;
proc.FileName = System.Reflection.Assembly.GetEntryAssembly().Location;
proc.Arguments = string.Format("\"{0}\" \"{1}\" \"{2}\" admin", srcFile, destFile, backupDestFile);
proc.UseShellExecute = true;
proc.Verb = "runas";

View file

@ -38,10 +38,12 @@ all: ui
ui: InteropDLL/$(OBJFOLDER)/$(SHAREDLIB)
mkdir -p $(RELEASEFOLDER)/Dependencies
rm -f $(RELEASEFOLDER)/Dependencies/*
rm -f $(RELEASEFOLDER)/Dependencies/*
cd UpdateHelper && xbuild /property:Configuration="Release" /property:Platform="AnyCPU"
cp "bin/Any CPU/Release/MesenUpdater.exe" $(RELEASEFOLDER)/Dependencies/
cp GUI.NET/Dependencies/* $(RELEASEFOLDER)/Dependencies/
cp InteropDLL/$(OBJFOLDER)/$(SHAREDLIB) $(RELEASEFOLDER)/Dependencies/$(SHAREDLIB)
cd $(RELEASEFOLDER)/Dependencies && zip ../Dependencies.zip *
cd $(RELEASEFOLDER)/Dependencies && zip ../Dependencies.zip *
cd GUI.NET && xbuild /property:Configuration="Release" /property:Platform="$(MESENPLATFORM)" /property:PreBuildEvent="" /property:DefineConstants="HIDETESTMENU"
core: InteropDLL/$(OBJFOLDER)/$(SHAREDLIB)