mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-15 17:30:27 +08:00
feat: PC 端运行时要求以管理员身份重启 MAA (#15748)
This commit is contained in:
@@ -2475,6 +2475,25 @@ public class AsstProxy
|
||||
/// <returns>是否成功。</returns>
|
||||
private bool AsstAttachWindowConnect(ref string error)
|
||||
{
|
||||
if (!Bootstrapper.IsUserAdministrator())
|
||||
{
|
||||
var result = Application.Current.Dispatcher.Invoke(() =>
|
||||
MessageBoxHelper.Show(
|
||||
LocalizationHelper.GetString("AttachWindowNeedAdmin"),
|
||||
"MAA",
|
||||
MessageBoxButton.YesNo,
|
||||
MessageBoxImage.Question));
|
||||
|
||||
if (result == MessageBoxResult.No)
|
||||
{
|
||||
error = LocalizationHelper.GetString("RestartAsAdminFailed");
|
||||
return false;
|
||||
}
|
||||
|
||||
Bootstrapper.RestartAsAdmin();
|
||||
return false;
|
||||
}
|
||||
|
||||
Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("UseAttachWindowWarning"), UiLogColor.Warning);
|
||||
|
||||
const string TargetWindowName = "明日方舟";
|
||||
|
||||
@@ -668,6 +668,12 @@ public class Bootstrapper : Bootstrapper<RootViewModel>
|
||||
}
|
||||
}
|
||||
|
||||
if (_restartStartInfo is not null)
|
||||
{
|
||||
Process.Start(_restartStartInfo);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_isRestartingWithoutArgs)
|
||||
{
|
||||
return;
|
||||
@@ -706,6 +712,7 @@ public class Bootstrapper : Bootstrapper<RootViewModel>
|
||||
}
|
||||
|
||||
private static bool _isRestartingWithoutArgs;
|
||||
private static ProcessStartInfo _restartStartInfo;
|
||||
|
||||
/// <summary>
|
||||
/// 重启,不带参数
|
||||
@@ -718,6 +725,18 @@ public class Bootstrapper : Bootstrapper<RootViewModel>
|
||||
Execute.OnUIThread(Application.Current.Shutdown);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重启,使用自定义启动参数
|
||||
/// </summary>
|
||||
/// <param name="startInfo">新进程的启动参数。</param>
|
||||
/// <param name="caller">Caller Member Name</param>
|
||||
public static void ShutdownAndRestartWith(ProcessStartInfo startInfo, [CallerMemberName] string caller = "")
|
||||
{
|
||||
_restartStartInfo = startInfo;
|
||||
_logger.Information("Shutdown and restart with custom StartInfo, call by `{Caller}`", caller);
|
||||
Execute.OnUIThread(Application.Current.Shutdown);
|
||||
}
|
||||
|
||||
private static bool _isRestartingAfterUpdate;
|
||||
|
||||
public static void RestartAfterUpdate([CallerMemberName] string caller = "")
|
||||
@@ -732,6 +751,24 @@ public class Bootstrapper : Bootstrapper<RootViewModel>
|
||||
Execute.OnUIThread(Application.Current.Shutdown);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 以管理员权限重启应用,UAC 弹窗在退出时触发。
|
||||
/// </summary>
|
||||
public static void RestartAsAdmin()
|
||||
{
|
||||
if (Environment.ProcessPath is null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ShutdownAndRestartWith(new ProcessStartInfo
|
||||
{
|
||||
FileName = Environment.ProcessPath,
|
||||
UseShellExecute = true,
|
||||
Verb = "runas",
|
||||
});
|
||||
}
|
||||
|
||||
private static bool _isWaitingToRestart;
|
||||
|
||||
public static async Task RestartAfterIdleAsync()
|
||||
|
||||
@@ -1243,6 +1243,10 @@ Right-click to clear inactive jobs</system:String>
|
||||
<system:String x:Key="AttachWindowNotFound">Window "{0}" not found, please ensure the game is running</system:String>
|
||||
<system:String x:Key="AttachWindowMultipleFound">Found {0} "{1}" windows, using the first one</system:String>
|
||||
<system:String x:Key="AttachWindowFound">Found window "{0}"</system:String>
|
||||
<system:String x:Key="Administrator">Admin</system:String>
|
||||
<system:String x:Key="AttachWindowNeedAdmin">PC connection requires administrator privileges.\nRestart MAA as administrator?</system:String>
|
||||
<system:String x:Key="RestartingAsAdmin">Restarting as administrator…</system:String>
|
||||
<system:String x:Key="RestartAsAdminFailed">Please run MAA as administrator manually.</system:String>
|
||||
<system:String x:Key="AttachWindowFailed">AttachWindow failed, please check screencap/input method settings</system:String>
|
||||
<system:String x:Key="UseAttachWindowTip">Use Win32 window binding for Arknights PC client instead of ADB connection for emulators or phones</system:String>
|
||||
<system:String x:Key="UseAttachWindowWarning" xml:space="preserve">PC connection (experimental feature, stability not guaranteed)
|
||||
|
||||
@@ -1244,6 +1244,10 @@ C:\\leidian\\LDPlayer9
|
||||
<system:String x:Key="AttachWindowNotFound">ウィンドウ "{0}" が見つかりません。ゲームが起動していることを確認してください</system:String>
|
||||
<system:String x:Key="AttachWindowMultipleFound">{0} 個の "{1}" ウィンドウが見つかりました。最初のものを使用します</system:String>
|
||||
<system:String x:Key="AttachWindowFound">ウィンドウ "{0}" が見つかりました</system:String>
|
||||
<system:String x:Key="Administrator">管理者</system:String>
|
||||
<system:String x:Key="AttachWindowNeedAdmin">PC 接続には管理者権限が必要です。\n管理者として MAA を再起動しますか?</system:String>
|
||||
<system:String x:Key="RestartingAsAdmin">管理者として再起動しています…</system:String>
|
||||
<system:String x:Key="RestartAsAdminFailed">手動で管理者として MAA を実行してください。</system:String>
|
||||
<system:String x:Key="AttachWindowFailed">AttachWindow の接続に失敗しました。スクリーンキャプチャ/入力方法の設定を確認してください</system:String>
|
||||
<system:String x:Key="UseAttachWindowTip">エミュレータや携帯電話への ADB 接続ではなく、アークナイツ PC クライアントに Win32 ウィンドウバインディングを使用します</system:String>
|
||||
<system:String x:Key="UseAttachWindowWarning" xml:space="preserve">PC 接続(実験的機能・動作の安定性は保証されません)
|
||||
|
||||
@@ -1245,6 +1245,10 @@ C:\\leidian\\LDPlayer9
|
||||
<system:String x:Key="AttachWindowNotFound">창 "{0}"을(를) 찾을 수 없습니다. 게임이 실행 중인지 확인하세요</system:String>
|
||||
<system:String x:Key="AttachWindowMultipleFound">{0}개의 "{1}" 창을 찾았습니다. 첫 번째 창을 사용합니다</system:String>
|
||||
<system:String x:Key="AttachWindowFound">창 "{0}"을(를) 찾았습니다</system:String>
|
||||
<system:String x:Key="Administrator">관리자</system:String>
|
||||
<system:String x:Key="AttachWindowNeedAdmin">PC 연결에는 관리자 권한이 필요합니다.\n관리자로 MAA를 다시 시작하시겠습니까?</system:String>
|
||||
<system:String x:Key="RestartingAsAdmin">관리자로 다시 시작하는 중…</system:String>
|
||||
<system:String x:Key="RestartAsAdminFailed">MAA를 관리자 권한으로 직접 실행해 주세요.</system:String>
|
||||
<system:String x:Key="AttachWindowFailed">AttachWindow 연결에 실패했습니다. 스크린샷/입력 방법 설정을 확인하세요</system:String>
|
||||
<system:String x:Key="UseAttachWindowTip">에뮬레이터나 휴대폰용 ADB 연결 대신 명일방주 PC 클라이언트에 Win32 창 바인딩을 사용합니다</system:String>
|
||||
<system:String x:Key="UseAttachWindowWarning" xml:space="preserve">PC 연결 (실험적 기능이며 안정성은 보장되지 않습니다)
|
||||
|
||||
@@ -1244,6 +1244,10 @@ C:\\leidian\\LDPlayer9。\n
|
||||
<system:String x:Key="AttachWindowNotFound">未找到窗口 "{0}",请确保游戏已启动</system:String>
|
||||
<system:String x:Key="AttachWindowMultipleFound">找到 {0} 个 "{1}" 窗口,将使用第一个</system:String>
|
||||
<system:String x:Key="AttachWindowFound">找到窗口 "{0}"</system:String>
|
||||
<system:String x:Key="Administrator">管理员</system:String>
|
||||
<system:String x:Key="AttachWindowNeedAdmin">PC 端连接需要管理员权限。\n是否以管理员身份重启 MAA?</system:String>
|
||||
<system:String x:Key="RestartingAsAdmin">正在以管理员身份重启…</system:String>
|
||||
<system:String x:Key="RestartAsAdminFailed">请手动以管理员身份运行 MAA</system:String>
|
||||
<system:String x:Key="AttachWindowFailed">AttachWindow 绑定窗口失败,请检查截图/输入方式配置</system:String>
|
||||
<system:String x:Key="UseAttachWindowTip">使用 Win32 窗口绑定明日方舟 PC 端,而非 ADB 连接模拟器或手机</system:String>
|
||||
<system:String x:Key="UseAttachWindowWarning" xml:space="preserve">连接 PC 端(实验性功能,稳定性无法保证)
|
||||
|
||||
@@ -1244,6 +1244,10 @@ C:\\leidian\\LDPlayer9\n
|
||||
<system:String x:Key="AttachWindowNotFound">未找到視窗 "{0}",請確保遊戲已啟動</system:String>
|
||||
<system:String x:Key="AttachWindowMultipleFound">找到 {0} 個 "{1}" 視窗,將使用第一個</system:String>
|
||||
<system:String x:Key="AttachWindowFound">找到視窗 "{0}"</system:String>
|
||||
<system:String x:Key="Administrator">管理員</system:String>
|
||||
<system:String x:Key="AttachWindowNeedAdmin">PC 端連接需要管理員權限。\n是否以管理員身分重啟 MAA?</system:String>
|
||||
<system:String x:Key="RestartingAsAdmin">正在以管理員身分重啟…</system:String>
|
||||
<system:String x:Key="RestartAsAdminFailed">請手動以管理員身分執行 MAA</system:String>
|
||||
<system:String x:Key="AttachWindowFailed">AttachWindow 綁定視窗失敗,請檢查截圖/輸入方式配置</system:String>
|
||||
<system:String x:Key="UseAttachWindowTip">使用 Win32 視窗綁定明日方舟 PC 端,而非 ADB 連接模擬器或手機</system:String>
|
||||
<system:String x:Key="UseAttachWindowWarning" xml:space="preserve">連接 PC 端(實驗性功能,穩定性無法保證)
|
||||
|
||||
@@ -938,7 +938,8 @@ public class SettingsViewModel : Screen
|
||||
? $" - {LocalizationHelper.FormatVersion(VersionUpdateSettings.ResourceVersion, VersionUpdateSettings.ResourceDateTime)}"
|
||||
: string.Empty;
|
||||
string uiVersionDisplay = LocalizationHelper.FormatVersion(uiVersion, VersionUpdateSettingsUserControlModel.BuildDateTime);
|
||||
rvm.WindowTitle = $"{prefix}MAA{currentConfiguration} - {uiVersionDisplay}{resourceVersionDisplay}{connectConfigName}{connectAddress}{clientName}";
|
||||
string adminTag = Bootstrapper.IsAdministratorWithUac() ? $" ({LocalizationHelper.GetString("Administrator")})" : string.Empty;
|
||||
rvm.WindowTitle = $"{prefix}MAA{adminTag}{currentConfiguration} - {uiVersionDisplay}{resourceVersionDisplay}{connectConfigName}{connectAddress}{clientName}";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user