mirror of
https://github.com/cemu-project/DS4Windows.git
synced 2024-11-25 10:46:51 +01:00
Added preemptive updater downloading again
This commit is contained in:
parent
92bd1bd53f
commit
7685b95db0
@ -190,5 +190,46 @@ namespace DS4Windows
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static int ElevatedCopyUpdater(string tmpUpdaterPath, bool deleteUpdatesDir=false)
|
||||
{
|
||||
int result = -1;
|
||||
string tmpPath = Path.Combine(Path.GetTempPath(), "updatercopy.bat");
|
||||
// Create temporary bat script that will later be executed
|
||||
using (StreamWriter w = new StreamWriter(new FileStream(tmpPath,
|
||||
FileMode.Create, FileAccess.Write)))
|
||||
{
|
||||
w.WriteLine("@echo off"); // Turn off echo
|
||||
w.WriteLine("@echo Attempting to replace updater, please wait...");
|
||||
// Copy temp downloaded file to destination
|
||||
w.WriteLine($"@mov /Y \"{tmpUpdaterPath}\" {Global.exedirpath}\\DS4Updater.exe");
|
||||
if (deleteUpdatesDir)
|
||||
{
|
||||
w.WriteLine($"@del {Global.exedirpath}\\Update Files\\DS4Windows\\DS4Updater.exe");
|
||||
}
|
||||
w.WriteLine("@DEL \"%~f0\""); // Attempt to delete myself without opening a time paradox.
|
||||
w.Close();
|
||||
}
|
||||
|
||||
// Execute temp batch script with admin privileges
|
||||
ProcessStartInfo startInfo = new ProcessStartInfo();
|
||||
startInfo.FileName = tmpPath;
|
||||
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
|
||||
startInfo.Verb = "runas";
|
||||
startInfo.UseShellExecute = true;
|
||||
startInfo.CreateNoWindow = true;
|
||||
try
|
||||
{
|
||||
// Launch process, wait and then save exit code
|
||||
using (Process temp = Process.Start(startInfo))
|
||||
{
|
||||
temp.WaitForExit();
|
||||
result = temp.ExitCode;
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -55,6 +55,9 @@ namespace DS4WinWPF.DS4Forms
|
||||
|
||||
public ProfileList ProfileListHolder { get => profileListHolder; }
|
||||
|
||||
private const string UPDATER_VERSION = "1.4.1";
|
||||
private string updaterExe = Environment.Is64BitProcess ? "DS4Updater.exe" : "DS4Updater_x86.exe";
|
||||
|
||||
public MainWindow(ArgumentParser parser)
|
||||
{
|
||||
InitializeComponent();
|
||||
@ -184,23 +187,47 @@ Properties.Resources.DS4Update, MessageBoxButton.YesNo, MessageBoxImage.Question
|
||||
|
||||
if (result == MessageBoxResult.Yes)
|
||||
{
|
||||
bool launch = false;
|
||||
using (Process p = new Process())
|
||||
bool launch = true;
|
||||
if (!File.Exists(Global.exedirpath + "\\DS4Updater.exe") ||
|
||||
(File.Exists(Global.exedirpath + "\\DS4Updater.exe")
|
||||
&& (FileVersionInfo.GetVersionInfo(Global.exedirpath + "\\DS4Updater.exe").FileVersion.CompareTo(UPDATER_VERSION) != 0)))
|
||||
{
|
||||
p.StartInfo.FileName = System.IO.Path.Combine(Global.exedirpath, "DS4Updater.exe");
|
||||
bool isAdmin = Global.IsAdministrator();
|
||||
List<string> argList = new List<string>();
|
||||
argList.Add("-autolaunch");
|
||||
if (!isAdmin)
|
||||
Uri url2 = new Uri($"https://github.com/Ryochan7/DS4Updater/releases/download/v{UPDATER_VERSION}/{updaterExe}");
|
||||
string filename = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "DS4Updater.exe");
|
||||
using (var downloadStream = new FileStream(filename, FileMode.Create))
|
||||
{
|
||||
argList.Add("-user");
|
||||
Task<System.Net.Http.HttpResponseMessage> temp =
|
||||
App.requestClient.GetAsync(url2.ToString(), downloadStream);
|
||||
temp.Wait();
|
||||
if (!temp.Result.IsSuccessStatusCode) launch = false;
|
||||
}
|
||||
p.StartInfo.Arguments = string.Join(" ", argList);
|
||||
if (Global.AdminNeeded())
|
||||
p.StartInfo.Verb = "runas";
|
||||
|
||||
try { launch = p.Start(); }
|
||||
catch (InvalidOperationException) { }
|
||||
if (launch)
|
||||
{
|
||||
int copyStatus = Util.ElevatedCopyUpdater(filename);
|
||||
if (copyStatus != 0) launch = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (launch)
|
||||
{
|
||||
using (Process p = new Process())
|
||||
{
|
||||
p.StartInfo.FileName = System.IO.Path.Combine(Global.exedirpath, "DS4Updater.exe");
|
||||
bool isAdmin = Global.IsAdministrator();
|
||||
List<string> argList = new List<string>();
|
||||
argList.Add("-autolaunch");
|
||||
if (!isAdmin)
|
||||
{
|
||||
argList.Add("-user");
|
||||
}
|
||||
p.StartInfo.Arguments = string.Join(" ", argList);
|
||||
if (Global.AdminNeeded())
|
||||
p.StartInfo.Verb = "runas";
|
||||
|
||||
try { launch = p.Start(); }
|
||||
catch (InvalidOperationException) { }
|
||||
}
|
||||
}
|
||||
|
||||
if (launch)
|
||||
@ -211,6 +238,14 @@ Properties.Resources.DS4Update, MessageBoxButton.YesNo, MessageBoxImage.Question
|
||||
Close();
|
||||
}));
|
||||
}
|
||||
else
|
||||
{
|
||||
Dispatcher.Invoke(() =>
|
||||
{
|
||||
MessageBox.Show(Properties.Resources.PleaseDownloadUpdater);
|
||||
});
|
||||
//Process.Start($"https://github.com/Ryochan7/DS4Updater/releases/download/v{UPDATER_VERSION}/{updaterExe}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -436,10 +471,17 @@ Suspend support not enabled.", true);
|
||||
processes = Process.GetProcessesByName("DS4Updater");
|
||||
}
|
||||
|
||||
File.Delete(Global.exedirpath + "\\DS4Updater.exe");
|
||||
File.Move(Global.exedirpath + "\\Update Files\\DS4Windows\\DS4Updater.exe",
|
||||
Global.exedirpath + "\\DS4Updater.exe");
|
||||
Directory.Delete(Global.exedirpath + "\\Update Files", true);
|
||||
if (!Global.AdminNeeded())
|
||||
{
|
||||
File.Delete(Global.exedirpath + "\\DS4Updater.exe");
|
||||
File.Move(Global.exedirpath + "\\Update Files\\DS4Windows\\DS4Updater.exe",
|
||||
Global.exedirpath + "\\DS4Updater.exe");
|
||||
Directory.Delete(Global.exedirpath + "\\Update Files", true);
|
||||
}
|
||||
else
|
||||
{
|
||||
Util.ElevatedCopyUpdater(Global.exedirpath + "\\Update Files\\DS4Windows\\DS4Updater.exe", true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user