如何让Electron+Go跨平台Docker管理应用以高权限运行?
高权限执行Electron+Go跨平台应用命令的解决方案需求
我正在开发一个基于Electron + Bootstrap5.3 + Node.js + Go + Cobra的跨平台应用,目标是通过Web界面让用户在Windows、Linux、Mac系统上执行系统命令,管理Docker容器环境。核心需求是如何让应用及调用的Go后端以高权限执行命令?
当前Windows下的高权限配置实现
目前仅实现了Windows下通过package.json配置高权限启动的方式,示例代码如下:
"scripts": { "start": "electron src/main.js --trace-warnings --win32metadata.requested-execution-level=requireAdministrator", "build": "electron-builder" }, ... "win": { "target": [ "nsis" ], "artifactName": "webstack-deployer-for-docker-${version}.exe", "icon": "src/assets/icons/icon.ico", "requestedExecutionLevel": "requireAdministrator", "adminRequested": true },
现有方案的局限
找到过一个仅能检测运行权限的方案,但无法强制或重启Node.js应用以高权限运行,也无法让调用的Go后端获得相同权限。
待移植的C#权限检测与重启代码
我有一段C#实现的权限检测与重启代码,但不知道如何移植到Node.js项目中:
internal static void CheckElevated() { if (!IsRunAsAdmin()) { RunApp(); } } public static void RunApp() { Assembly? assemblyEntries = Assembly.GetEntryAssembly(); if (assemblyEntries != null) { string executablePath = assemblyEntries.Location.Replace(".dll", ".exe"); if (!File.Exists(executablePath) && Environment.ProcessPath != null) { executablePath = Environment.ProcessPath; } if (File.Exists(executablePath)) { ProcessStartInfo processInfo = new() { UseShellExecute = true, WorkingDirectory = Environment.CurrentDirectory, FileName = executablePath, Verb = "runas" }; try { Process.Start(processInfo); Environment.Exit(0); } catch (Exception ex) { MessageBox.Show("Error: This program must be run as an administrator! \n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } else { MessageBox.Show("Error: This program must be run as an administrator!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } public static bool IsRunAsAdmin() { try { WindowsIdentity id = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new(id); return principal.IsInRole(WindowsBuiltInRole.Administrator); } catch (Exception) { return false; } }
项目权限处理的分析
在C#版本的应用中只需做一次权限处理,但本项目分为前后端两层,推测可能需要在两处都进行权限校验。
后续计划
近期计划将C#的逻辑移植到Node.js的is-elevated实现中,最终目标是让应用和Go后端都以高权限重启,以便程序化创建目录和文件。
内容的提问来源于stack exchange,提问作者Francisco IA Lover
相关产品推荐
相关产品推荐

