ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Tabby 在 Windows 上如何以管理员权限运行本地 Shell 会话?

2026/9/12 11:10:21 拓冰建站 浏览量
Tabby 在 Windows 上如何以管理员权限运行本地 Shell 会话? Tabby 在 Windows 上如何以管理员权限运行本地 Shell 会话【免费下载链接】tabbyA terminal for a more modern age项目地址: https://gitcode.com/GitHub_Trending/ta/tabby在 Windows 上管理需要提升权限的操作比如改系统设置、跑需要管理员的脚本时普通 Shell 会话会遇到权限不足。Tabby 为本地终端会话提供了以管理员身份运行的开关开启后会话不再直接启动你配置的 Shell而是通过随程序分发的UAC.exe辅助程序代为启动从而获得管理员权限。需要注意的前提这个能力只在 Windows 上可用且要求系统构建号不低于 17692。判断逻辑在 tabby-core/src/utils.tsexport const WIN_BUILD_CONPTY_SUPPORTED 17692 export function getWindows10Build (): number|undefined { return process.platform win32 parseFloat(os.release()) 10 ? parseInt(os.release().split(.)[2]) : undefined } export function isWindowsBuild (build: number): boolean { const b getWindows10Build() return b ! undefined b build }即平台必须是 win32、版本号属于 Windows 10os.release()主版本 ≥ 10并取版本号第三段作为构建号与 17692 比较。不满足条件时下文的设置开关和右键菜单项都不会出现这是判断为什么我没看到入口的第一依据。方式一在本地终端配置中开启持久生效在 Tabby 中打开一个本地终端Local terminal 类型的配置该配置页由 localProfileSettings.component.pug 渲染。在 General 页中找到Run as administrator开关。这一行仅在 UAC 服务可用时渲染.form-line(*ngIfuac?.isAvailable) .header .title(translate) Run as administrator toggle( [(ngModel)]profile.options.runAsAdministrator, )打开开关后该配置项被写入配置的options.runAsAdministrator默认值false见 tabby-local/src/profiles.ts。此后用这个配置打开的每个本地会话都会以管理员身份启动。方式二右键菜单临时以管理员打开不想改配置时可以在标签的右键菜单中直接打开实现见 tabby-local/src/tabContextMenu.ts这两项菜单同样只在 UAC 服务可用时出现New admin tab子菜单列出全部本地配置选择一项即打开一个临时叠加了runAsAdministrator: true的会话原配置不受影响if (this.uac?.isAvailable) { items.push({ label: this.translate.instant(New admin tab), submenu: profiles.map(profile ({ label: profile.name, click: () { this.profilesService.openNewTabForProfile({ ...profile, options: { ...profile.options, runAsAdministrator: true, }, }) }, })), }) }Duplicate as administrator在本地终端标签的菜单上额外提供把当前标签的配置复制一份并临时加上runAsAdministrator: true打开第 69-83 行。适合当前这个会话要临时提权的场景。提权启动是如何发生的两种方式的判断点相同在 terminalTab.component.ts 的initializeSession中if (this.profile.options.runAsAdministrator this.uac?.isAvailable) { this.profile { ...this.profile, options: this.uac.patchSessionOptionsForUAC(this.profile.options), } }真正改写启动参数的是 ElectronUACServiceUACService的可用性与平台判断绑定在构造函数里this.isAvailable isWindowsBuild(WIN_BUILD_CONPTY_SUPPORTED) patchSessionOptionsForUAC (sessionOptions: SessionOptions): SessionOptions { let helperPath path.join( path.dirname(this.electron.app.getPath(exe)), resources, extras, UAC.exe, ) if (process.env.TABBY_DEV) { helperPath path.join( path.dirname(this.electron.app.getPath(exe)), .., .., .., extras, UAC.exe, ) } const options { ...sessionOptions } options.args [options.command, ...options.args] options.command helperPath return options }也就是说PTY 实际启动的command被替换为辅助程序UAC.exe原本的 Shell 命令如powershell、cmd被整体挪到参数第一位由辅助程序负责以管理员身份把它跑起来。辅助程序路径按安装形态区分打包好的发行版Tabby 可执行文件所在目录下的resources/extras/UAC.exe源码工程在 tabby-uac/开发构建设置了TABBY_DEV环境变量从源树相对路径取 extras/UAC.exe。如果会话没有启动可以先确认对应形态下的UAC.exe是否存在因为它是整个提权路径的入口。验证管理员权限是否生效入口可见性本身就是第一道验证开关或 New admin tab / Duplicate as administrator 菜单不显示说明系统不满足isWindowsBuild(17692)条件此时即使手动改配置patchSessionOptionsForUAC也不会被调用判断条件包含this.uac?.isAvailable。会话成功启动后Windows 会弹出提权确认提示确认后会话即由UAC.exe以管理员身份拉起你配置的 Shell。在新会话里执行whoami输出应为当前 Windows 账户可与其在未开启管理员的会话中的结果对照确认权限差异来自本功能。限制仅限 Windows非 Windows 平台上uac.isAvailable为false所有入口都不渲染配置里的runAsAdministrator不会产生任何效果。仅作用于本地终端会话Local terminal 类型的配置不影响 SSH 等其他会话类型。该功能依赖程序自带的UAC.exe辅助程序缺失或无法执行时提权会话将无法启动。【免费下载链接】tabbyA terminal for a more modern age项目地址: https://gitcode.com/GitHub_Trending/ta/tabby创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考