������� �� Avalonia 2.0 (�����-���������, ����������, �������� ��������) #1
@ -74,6 +74,24 @@ namespace Электронная_Фармация.Classes
|
||||
throw new InvalidOperationException("В архиве не найден exe приложения.");
|
||||
}
|
||||
|
||||
// Переносим payload в путь без спецсимволов: имя корневой папки в архиве
|
||||
// бывает в чужой кодировке, и такой путь ломает аргумент SRC у robocopy
|
||||
// (особенно при запуске под elevated cmd с OEM-кодовой страницей).
|
||||
var asciiPayload = Path.Combine(workRoot, "payload");
|
||||
try
|
||||
{
|
||||
if (Directory.Exists(asciiPayload))
|
||||
{
|
||||
Directory.Delete(asciiPayload, true);
|
||||
}
|
||||
Directory.Move(payloadDir, asciiPayload);
|
||||
payloadDir = asciiPayload;
|
||||
}
|
||||
catch
|
||||
{
|
||||
// Если перенос не удался — работаем с исходным путём.
|
||||
}
|
||||
|
||||
var needsElevation = !IsDirectoryWritable(installDir);
|
||||
var updaterBat = Path.Combine(workRoot, "apply-update.cmd");
|
||||
WriteUpdaterScript(updaterBat);
|
||||
@ -82,12 +100,12 @@ namespace Электронная_Фармация.Classes
|
||||
? "Нужны права администратора для установки в Program Files..."
|
||||
: "Подготовка перезапуска...");
|
||||
|
||||
var batchArgs = Quote(payloadDir) + " " + Quote(installDir) + " " +
|
||||
Quote(Path.GetFileName(currentExe)) + " " +
|
||||
Process.GetCurrentProcess().Id;
|
||||
|
||||
var psi = new ProcessStartInfo
|
||||
{
|
||||
FileName = updaterBat,
|
||||
Arguments = Quote(payloadDir) + " " + Quote(installDir) + " " +
|
||||
Quote(Path.GetFileName(currentExe)) + " " +
|
||||
Process.GetCurrentProcess().Id,
|
||||
UseShellExecute = true,
|
||||
WorkingDirectory = workRoot,
|
||||
WindowStyle = needsElevation ? ProcessWindowStyle.Normal : ProcessWindowStyle.Hidden,
|
||||
@ -95,9 +113,19 @@ namespace Электронная_Фармация.Classes
|
||||
};
|
||||
if (needsElevation)
|
||||
{
|
||||
// UAC prompt — без этого robocopy в Program Files молча не заменяет exe.
|
||||
// ВАЖНО: повышаем права через cmd.exe (PE-исполняемый), а НЕ через
|
||||
// .cmd-файл напрямую. ShellExecute с verb=runas на .cmd срабатывает не
|
||||
// на всех системах (у batch может не быть runas-ассоциации), из-за чего
|
||||
// elevated-процесс молча не запускается и обновление не применяется.
|
||||
psi.FileName = "cmd.exe";
|
||||
psi.Arguments = "/c \"\"" + updaterBat + "\" " + batchArgs + "\"";
|
||||
psi.Verb = "runas";
|
||||
}
|
||||
else
|
||||
{
|
||||
psi.FileName = updaterBat;
|
||||
psi.Arguments = batchArgs;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
@ -32,6 +32,6 @@ using System.Runtime.InteropServices;
|
||||
// пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ
|
||||
// пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ "*", пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅ:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.24.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.24.0")]
|
||||
[assembly: AssemblyVersion("1.0.25.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.25.0")]
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user