GTweak 命令执行器:系统命令背后的 6 个入口,选型只需 3 秒

发布时间:2026/10/23 6:13:21
GTweak 命令执行器:系统命令背后的 6 个入口,选型只需 3 秒
GTweak 命令执行器系统命令背后的 6 个入口选型只需 3 秒【免费下载链接】GTweakPortable Tool for an Ideal Windows Setup项目地址: https://gitcode.com/GitHub_Trending/gt/GTweak点完运行黑窗口为什么迟迟不关你把一个 .bat 文件丢进 Windows 系统优化工具 GTweak 的 Addons 目录点运行控制台窗口弹出、滚动输出、最后停在屏幕上。可翻遍源码你会发现散落各处的new Process一个都没有——全项目上百个功能按钮都走同一个文件CommandExecutor.cs。CommandExecutor 的 6 个入口怎么选这个internal static类按两个维度给方法分好了位要不要看输出、要不要提权或可见。读表完成选型入口一句话用途典型调用方GetCommandOutput静默执行并返回 stdout退出码非 0 时返回空串HardwareProvider.csRunCommand发出去就不等结果靠runas拉起 UAC 提权MemoryCleaner.csInvokeRunCommand静默执行等进程退出才返回结果可被后续步骤依赖WinLicenseHandler.csInvokeRunVisibleProcess弹可见窗口跑外部程序可选提权AddonsViewModel.csRunCommandAsTrustedInstaller以权限最高的 TrustedInstaller 身份执行WinLicenseHandler.csRunEncodedPowerShell命令先 Base64 编码再走-EncodedCommand绕开引号转义DefenderTweaks.cs口诀要结果选GetCommandOutput跑完就散选RunCommand跑完还要接着用它的结果选InvokeRunCommand用户需要盯着过程选InvokeRunVisibleProcess动系统保护文件选RunCommandAsTrustedInstaller命令里引号成堆选RunEncodedPowerShell。说白了这个类就是全项目的命令前台。三个藏得深的实现细节异步等待为什么不卡界面常规坑.NET 4.x 的Process没有原生异步等待UI 线程上调WaitForExit一阻塞整个界面就冻住。它的解法约 20 行的扩展方法WaitForExitAsync用TaskCompletionSource任务完成信号器回调转异步的桥挂Exited事件进程一退出就触发完成后自动解绑事件防泄漏。为什么更优调用方只写一行await线程不占死且扩展方法全项目复用不动任何调用点。TrustedInstaller 提权如何闭环常规坑普通管理员碰不了系统保护文件即便启动了 TrustedInstaller 服务你也说不清到底哪个进程是它。它的解法类里有个volatile int PID静态字段专门记录服务进程号TrustedInstaller.cs 每次执行前先按进程名验证 PID 是否还是 TI不是就重启服务再来失败重试 3 次。为什么更优创建进程时通过父进程属性把目标进程生在 TI 名下提权链可重复、可恢复。⚠️ 少了这个字段第二次调用就可能静默失败。多行命令怎么安全压平常规坑用户脚本参数常夹带换行和多余空格直接拼进单行命令执行直接炸。它的解法CleanCommand按行拆分、去空行、把连续空白压成一个空格再按原命令内容自动挑或合并。为什么更优分隔符不是随手写的——表示前一步成功才执行下一步保留语义。一个 .ps1 脚本的完整链路AddonsViewModel.cs 的RunFile按扩展名分流.reg走reg.exe import.ps1交给 PowerShell 并加-ExecutionPolicy Bypass其余进 CMD 的/k模式窗口保持打开。参数先过CleanCommand压成单行多行参数不会在拼接处翻车。Task.Run后台线程调InvokeRunVisibleProcess窗口对用户可见脚本输出一目了然。脚本若标记需要管理员则转第 2 节说的 TrustedInstaller 通道启动服务、记 PID、伪装 SYSTEM 身份、以 TI 为父进程创建子进程。这一步是关键。任何一环抛异常都被try/catch接住交给 ErrorLogger.cs 记录单条命令失败不拖垮界面。 你品一下这个分工ViewModel 只管跑什么执行器只管怎么跑。带走 3 句话先定执行契约再写功能。把静默/可见、同步/异步、普通/提权组合成有限方法集合新需求一行接入而不是让Process散落各处。TCS 加事件回调是旧 API 异步化的通法。WaitForExitAsync这种二十行扩展方法可以直接搬进你的项目任何没有异步版本的回调 API 都适用。提权是链条不是按钮。谁当父进程、身份从哪来、失败怎么恢复三个问题不回答第二次调用就会看起来执行了其实没有。【免费下载链接】GTweakPortable Tool for an Ideal Windows Setup项目地址: https://gitcode.com/GitHub_Trending/gt/GTweak创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考