mirror of
https://gh.catmak.name/https://github.com/mihomo-party-org/mihomo-party
synced 2025-12-27 13:10:30 +08:00
feat: add startup prompt for core permission check
This commit is contained in:
parent
cb3eedfcb8
commit
bb58b60c21
@ -350,14 +350,14 @@ export async function checkAdminPrivileges(): Promise<boolean> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function restartAsAdmin(): Promise<void> {
|
export async function restartAsAdmin(addTunFlag = true): Promise<void> {
|
||||||
if (process.platform !== 'win32') {
|
if (process.platform !== 'win32') {
|
||||||
throw new Error('This function is only available on Windows')
|
throw new Error('This function is only available on Windows')
|
||||||
}
|
}
|
||||||
|
|
||||||
const exePath = process.execPath
|
const exePath = process.execPath
|
||||||
const args = process.argv.slice(1)
|
const args = process.argv.slice(1)
|
||||||
const restartArgs = [...args, '--admin-restart-for-tun']
|
const restartArgs = addTunFlag ? [...args, '--admin-restart-for-tun'] : args.filter(arg => arg !== '--admin-restart-for-tun')
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 处理路径和参数的引号
|
// 处理路径和参数的引号
|
||||||
@ -371,7 +371,10 @@ export async function restartAsAdmin(): Promise<void> {
|
|||||||
command = `powershell -Command "Start-Process -FilePath '${escapedExePath}' -Verb RunAs"`
|
command = `powershell -Command "Start-Process -FilePath '${escapedExePath}' -Verb RunAs"`
|
||||||
}
|
}
|
||||||
|
|
||||||
await managerLogger.info('Restarting as administrator with command', command)
|
const logMessage = addTunFlag
|
||||||
|
? 'Restarting as administrator for TUN mode with command'
|
||||||
|
: 'Restarting as normal user from high privilege detection with command'
|
||||||
|
await managerLogger.info(logMessage, command)
|
||||||
|
|
||||||
// 执行PowerShell命令
|
// 执行PowerShell命令
|
||||||
exec(command, { windowsHide: true }, async (error, _stdout, stderr) => {
|
exec(command, { windowsHide: true }, async (error, _stdout, stderr) => {
|
||||||
@ -453,11 +456,56 @@ export async function checkAdminRestartForTun(): Promise<void> {
|
|||||||
await managerLogger.error('Failed to auto-enable TUN after admin restart', error)
|
await managerLogger.error('Failed to auto-enable TUN after admin restart', error)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
await checkHighPrivilegeCore()
|
||||||
// 检查TUN配置与权限的匹配
|
// 检查TUN配置与权限的匹配
|
||||||
await validateTunPermissionsOnStartup()
|
await validateTunPermissionsOnStartup()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function checkHighPrivilegeCore(): Promise<void> {
|
||||||
|
try {
|
||||||
|
// 在 Win 平台检查
|
||||||
|
if (process.platform !== 'win32') {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const hasAdminPrivileges = await checkAdminPrivileges()
|
||||||
|
if (hasAdminPrivileges) {
|
||||||
|
await managerLogger.info('Detected high privilege core startup, showing dialog...')
|
||||||
|
|
||||||
|
const { dialog, app } = await import('electron')
|
||||||
|
const { t } = await import('i18next')
|
||||||
|
|
||||||
|
// 对话框
|
||||||
|
const result = await dialog.showMessageBox({
|
||||||
|
type: 'warning',
|
||||||
|
title: t('tun.permissions.highPrivilegeDetected.title'),
|
||||||
|
message: t('tun.permissions.highPrivilegeDetected.message'),
|
||||||
|
detail: t('tun.permissions.highPrivilegeDetected.detail'),
|
||||||
|
buttons: [
|
||||||
|
t('tun.permissions.highPrivilegeDetected.restart'),
|
||||||
|
t('tun.permissions.highPrivilegeDetected.exit')
|
||||||
|
],
|
||||||
|
defaultId: 0,
|
||||||
|
cancelId: 1,
|
||||||
|
noLink: true
|
||||||
|
})
|
||||||
|
|
||||||
|
if (result.response === 0) {
|
||||||
|
await managerLogger.info('User confirmed restart as normal user')
|
||||||
|
await restartAsAdmin(false)
|
||||||
|
} else {
|
||||||
|
await managerLogger.info('User cancelled, exiting application')
|
||||||
|
app.quit()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
await managerLogger.error('Failed to check high privilege core', error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export async function validateTunPermissionsOnStartup(): Promise<void> {
|
export async function validateTunPermissionsOnStartup(): Promise<void> {
|
||||||
try {
|
try {
|
||||||
const { tun } = await getControledMihomoConfig()
|
const { tun } = await getControledMihomoConfig()
|
||||||
|
|||||||
@ -323,6 +323,11 @@
|
|||||||
"tun.permissions.windowsRestart": "On Windows, you need to restart the application as administrator to use TUN mode",
|
"tun.permissions.windowsRestart": "On Windows, you need to restart the application as administrator to use TUN mode",
|
||||||
"tun.permissions.requesting": "Requesting administrator privileges, please click 'Yes' in the UAC dialog...",
|
"tun.permissions.requesting": "Requesting administrator privileges, please click 'Yes' in the UAC dialog...",
|
||||||
"tun.permissions.restarting": "Restarting application with administrator privileges, please click 'Yes' in the UAC dialog...",
|
"tun.permissions.restarting": "Restarting application with administrator privileges, please click 'Yes' in the UAC dialog...",
|
||||||
|
"tun.permissions.highPrivilegeDetected.title": "High Privilege Core Detected",
|
||||||
|
"tun.permissions.highPrivilegeDetected.message": "Application is running with administrator privileges",
|
||||||
|
"tun.permissions.highPrivilegeDetected.detail": "About to restart the application in administrator mode. Restart now?",
|
||||||
|
"tun.permissions.highPrivilegeDetected.restart": "Restart",
|
||||||
|
"tun.permissions.highPrivilegeDetected.exit": "Exit Application",
|
||||||
"dns.title": "DNS Settings",
|
"dns.title": "DNS Settings",
|
||||||
"dns.enable": "Enable DNS",
|
"dns.enable": "Enable DNS",
|
||||||
"dns.enhancedMode.title": "Domain Mapping Mode",
|
"dns.enhancedMode.title": "Domain Mapping Mode",
|
||||||
|
|||||||
@ -307,6 +307,16 @@
|
|||||||
"tun.notifications.coreAuthSuccess": "مجوزدهی به هسته با موفقیت انجام شد",
|
"tun.notifications.coreAuthSuccess": "مجوزدهی به هسته با موفقیت انجام شد",
|
||||||
"tun.notifications.firewallResetSuccess": "بازنشانی دیوار آتش با موفقیت انجام شد",
|
"tun.notifications.firewallResetSuccess": "بازنشانی دیوار آتش با موفقیت انجام شد",
|
||||||
"tun.error.tunPermissionDenied": "راهاندازی رابط TUN با شکست مواجه شد، لطفا به صورت دستی به هسته مجوز دهید",
|
"tun.error.tunPermissionDenied": "راهاندازی رابط TUN با شکست مواجه شد، لطفا به صورت دستی به هسته مجوز دهید",
|
||||||
|
"tun.permissions.required": "حالت TUN نیاز به مجوزهای مدیر دارد. آیا اکنون برنامه را مجدداً راهاندازی کنیم تا مجوزها را دریافت کنیم؟",
|
||||||
|
"tun.permissions.failed": "مجوزدهی با شکست مواجه شد",
|
||||||
|
"tun.permissions.windowsRestart": "در ویندوز، برای استفاده از حالت TUN باید برنامه را به عنوان مدیر مجدداً راهاندازی کنید",
|
||||||
|
"tun.permissions.requesting": "درخواست مجوزهای مدیر، لطفا در دیالوگ UAC روی 'بله' کلیک کنید...",
|
||||||
|
"tun.permissions.restarting": "راهاندازی مجدد برنامه با مجوزهای مدیر، لطفا در دیالوگ UAC روی 'بله' کلیک کنید...",
|
||||||
|
"tun.permissions.highPrivilegeDetected.title": "هسته با مجوزهای بالا شناسایی شد",
|
||||||
|
"tun.permissions.highPrivilegeDetected.message": "برنامه با مجوزهای مدیر در حال اجرا است",
|
||||||
|
"tun.permissions.highPrivilegeDetected.detail": "برنامه در حالت مدیر سیستم دوباره راهاندازی خواهد شد. آیا میخواهید اکنون راهاندازی مجدد شود؟",
|
||||||
|
"tun.permissions.highPrivilegeDetected.restart": "راهاندازی مجدد",
|
||||||
|
"tun.permissions.highPrivilegeDetected.exit": "خروج از برنامه",
|
||||||
"dns.title": "تنظیمات DNS",
|
"dns.title": "تنظیمات DNS",
|
||||||
"dns.enable": "فعالسازی DNS",
|
"dns.enable": "فعالسازی DNS",
|
||||||
"dns.enhancedMode.title": "حالت نگاشت دامنه",
|
"dns.enhancedMode.title": "حالت نگاشت دامنه",
|
||||||
|
|||||||
@ -307,6 +307,16 @@
|
|||||||
"tun.notifications.coreAuthSuccess": "Авторизация ядра успешна",
|
"tun.notifications.coreAuthSuccess": "Авторизация ядра успешна",
|
||||||
"tun.notifications.firewallResetSuccess": "Брандмауэр успешно сброшен",
|
"tun.notifications.firewallResetSuccess": "Брандмауэр успешно сброшен",
|
||||||
"tun.error.tunPermissionDenied": "Ошибка запуска TUN, попробуйте вручную предоставить разрешения ядру",
|
"tun.error.tunPermissionDenied": "Ошибка запуска TUN, попробуйте вручную предоставить разрешения ядру",
|
||||||
|
"tun.permissions.required": "Режим TUN требует прав администратора. Перезапустить приложение сейчас для получения разрешений?",
|
||||||
|
"tun.permissions.failed": "Ошибка авторизации разрешений",
|
||||||
|
"tun.permissions.windowsRestart": "В Windows необходимо перезапустить приложение от имени администратора для использования режима TUN",
|
||||||
|
"tun.permissions.requesting": "Запрос прав администратора, пожалуйста, нажмите 'Да' в диалоге UAC...",
|
||||||
|
"tun.permissions.restarting": "Перезапуск приложения с правами администратора, пожалуйста, нажмите 'Да' в диалоге UAC...",
|
||||||
|
"tun.permissions.highPrivilegeDetected.title": "Обнаружено ядро с высокими привилегиями",
|
||||||
|
"tun.permissions.highPrivilegeDetected.message": "Приложение работает с правами администратора",
|
||||||
|
"tun.permissions.highPrivilegeDetected.detail": "Сейчас приложение будет перезапущено в режиме администратора. Перезапустить сейчас?",
|
||||||
|
"tun.permissions.highPrivilegeDetected.restart": "Перезапустить",
|
||||||
|
"tun.permissions.highPrivilegeDetected.exit": "Выйти из приложения",
|
||||||
"dns.title": "Настройки DNS",
|
"dns.title": "Настройки DNS",
|
||||||
"dns.enable": "Включить DNS",
|
"dns.enable": "Включить DNS",
|
||||||
"dns.enhancedMode.title": "Режим маппинга доменов",
|
"dns.enhancedMode.title": "Режим маппинга доменов",
|
||||||
|
|||||||
@ -323,6 +323,11 @@
|
|||||||
"tun.permissions.windowsRestart": "Windows下需要以管理员身份重新启动应用才能使用TUN模式",
|
"tun.permissions.windowsRestart": "Windows下需要以管理员身份重新启动应用才能使用TUN模式",
|
||||||
"tun.permissions.requesting": "正在请求管理员权限,请在UAC对话框中点击'是'...",
|
"tun.permissions.requesting": "正在请求管理员权限,请在UAC对话框中点击'是'...",
|
||||||
"tun.permissions.restarting": "正在以管理员权限重启应用,请在UAC对话框中点击'是'...",
|
"tun.permissions.restarting": "正在以管理员权限重启应用,请在UAC对话框中点击'是'...",
|
||||||
|
"tun.permissions.highPrivilegeDetected.title": "检测到高权限内核",
|
||||||
|
"tun.permissions.highPrivilegeDetected.message": "应用正在以管理员权限运行",
|
||||||
|
"tun.permissions.highPrivilegeDetected.detail": "即将以管理员模式重启应用,现在重新启动吗?",
|
||||||
|
"tun.permissions.highPrivilegeDetected.restart": "重新启动",
|
||||||
|
"tun.permissions.highPrivilegeDetected.exit": "退出应用",
|
||||||
"dns.title": "DNS 设置",
|
"dns.title": "DNS 设置",
|
||||||
"dns.enable": "启用 DNS",
|
"dns.enable": "启用 DNS",
|
||||||
"dns.enhancedMode.title": "域名映射模式",
|
"dns.enhancedMode.title": "域名映射模式",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user