fix updater batch file encoding & code page

This commit is contained in:
pointfeev 2024-04-20 18:35:30 -04:00
parent 4927a079c7
commit 0b1d8e7937
2 changed files with 15 additions and 7 deletions

View file

@ -205,23 +205,31 @@ internal sealed partial class UpdateForm : CustomForm
string directory = Path.GetDirectoryName(path); string directory = Path.GetDirectoryName(path);
string file = Path.GetFileName(path); string file = Path.GetFileName(path);
StringBuilder commands = new(); StringBuilder commands = new();
_ = commands.AppendLine(CultureInfo.InvariantCulture, $"\nTASKKILL /F /T /PID {Program.CurrentProcessId}"); _ = commands.AppendLine(CultureInfo.InvariantCulture, $"chcp 65001");
_ = commands.AppendLine(CultureInfo.InvariantCulture, $":LOOP"); _ = commands.AppendLine(CultureInfo.InvariantCulture, $":LOOP");
_ = commands.AppendLine(CultureInfo.InvariantCulture, $"TASKLIST | FIND \" {Program.CurrentProcessId}\" "); _ = commands.AppendLine(CultureInfo.InvariantCulture, $"TASKKILL /F /T /PID {Program.CurrentProcessId}");
_ = commands.AppendLine(CultureInfo.InvariantCulture, $"TASKLIST | FIND \" {Program.CurrentProcessId} \"");
_ = commands.AppendLine(CultureInfo.InvariantCulture, $"IF NOT ERRORLEVEL 1 ("); _ = commands.AppendLine(CultureInfo.InvariantCulture, $"IF NOT ERRORLEVEL 1 (");
_ = commands.AppendLine(CultureInfo.InvariantCulture, $" TIMEOUT /T 1"); _ = commands.AppendLine(CultureInfo.InvariantCulture, $" TIMEOUT /T 1");
_ = commands.AppendLine(CultureInfo.InvariantCulture, $" GOTO LOOP"); _ = commands.AppendLine(CultureInfo.InvariantCulture, $" GOTO LOOP");
_ = commands.AppendLine(CultureInfo.InvariantCulture, $")"); _ = commands.AppendLine(CultureInfo.InvariantCulture, $")");
_ = commands.AppendLine(CultureInfo.InvariantCulture, $"MOVE /Y \"{ExecutablePath}\" \"{path}\""); _ = commands.AppendLine(CultureInfo.InvariantCulture, $"MOVE /Y \"{ExecutablePath}\" \"{path}\"");
_ = commands.AppendLine(CultureInfo.InvariantCulture, $"START \"\" /D \"{directory}\" \"{file}\""); _ = commands.AppendLine(CultureInfo.InvariantCulture, $"START \"\" /D \"{directory}\" \"{file}\"");
#if DEBUG
_ = commands.AppendLine(CultureInfo.InvariantCulture, $"PAUSE");
#endif
_ = commands.AppendLine(CultureInfo.InvariantCulture, $"EXIT"); _ = commands.AppendLine(CultureInfo.InvariantCulture, $"EXIT");
UpdaterPath.WriteFile(commands.ToString(), true, this); UpdaterPath.WriteFile(commands.ToString(), true, this, Encoding.Default);
Process process = new(); Process process = new();
ProcessStartInfo startInfo = new() ProcessStartInfo startInfo = new()
{ {
WorkingDirectory = ProgramData.DirectoryPath, FileName = "cmd.exe", WorkingDirectory = ProgramData.DirectoryPath, FileName = "cmd.exe",
Arguments = $"/C START \"UPDATER\" /B {Path.GetFileName(UpdaterPath)}", Arguments = $"/C START \"UPDATER\" /B {Path.GetFileName(UpdaterPath)}",
#if DEBUG
CreateNoWindow = false
#else
CreateNoWindow = true CreateNoWindow = true
#endif
}; };
process.StartInfo = startInfo; process.StartInfo = startInfo;
_ = process.Start(); _ = process.Start();

View file

@ -174,14 +174,14 @@ internal static class SafeIO
} }
} }
internal static string ReadFile(this string filePath, bool crucial = false, Form form = null) internal static string ReadFile(this string filePath, bool crucial = false, Form form = null, Encoding encoding = null)
{ {
if (!filePath.FileExists()) if (!filePath.FileExists())
return null; return null;
while (!Program.Canceled) while (!Program.Canceled)
try try
{ {
return File.ReadAllText(filePath, Encoding.UTF8); return File.ReadAllText(filePath, encoding ?? Encoding.UTF8);
} }
catch (Exception e) catch (Exception e)
{ {
@ -212,12 +212,12 @@ internal static class SafeIO
return null; return null;
} }
internal static void WriteFile(this string filePath, string text, bool crucial = false, Form form = null) internal static void WriteFile(this string filePath, string text, bool crucial = false, Form form = null, Encoding encoding = null)
{ {
while (!Program.Canceled) while (!Program.Canceled)
try try
{ {
File.WriteAllText(filePath, text, Encoding.UTF8); File.WriteAllText(filePath, text, encoding ?? Encoding.UTF8);
return; return;
} }
catch (Exception e) catch (Exception e)