资讯动态

GTweak 的 CommandExecutor:6 个入口如何静默驱动数十项 Windows 优化按钮

发布时间:2026/10/23 1:46:50 来源:尧图企业网站定制
GTweak 的 CommandExecutor6 个入口如何静默驱动数十项 Windows 优化按钮【免费下载链接】GTweakPortable Tool for an Ideal Windows Setup项目地址: https://gitcode.com/GitHub_Trending/gt/GTweak在 GTweak 里勾选清理临时文件后后台其实有一长串 cmd 命令正以系统最高权限身份悄悄执行全程没有黑框弹窗打扰你——这就是命令执行器 CommandExecutor 的功劳。它把启动进程、捕获输出、权限提升这些脏活收进一个仅 185 行的文件为项目里每个功能按钮提供统一通道。⚠️ 点击 GTweak 按钮后底层发生了什么在维护页点一下清理程序先通过原生接口清空各进程的内存工作集再把一长串rd/del命令交给执行器由它在 TrustedInstaller 身份下拉起隐藏子进程完成删除。假如每个功能都自己手写这套流程问题会很快堆积自己实现时会遇到的坑统一收口后的变化近 20 个源文件各写一遍启动进程、读输出样板行为难以一致全部走同一组 6 个入口新功能只管挑方法黑框弹窗时隐时现有的功能要提权、有的不要隐藏窗口与 UAC 策略由执行器统一决定单条命令失败就抛异常卡死 UI异常统一吞掉并交给 ErrorLogger一次失败不扩散一句话定位所有命令的调度台它像一个餐厅的调度台。服务员各个功能模块只需报一句话哪道菜、要热还是冷、要不要专用灶台——也就是哪条命令、隐藏还是可见、要不要提权。至于用哪个解释器cmd或 PowerShell、要不要显示窗口、要不要请求 UAC都由 CommandExecutor.cs 自行裁决功能代码从头到尾碰不到System.Diagnostics.Process类。入口怎么选6 个方法一张表讲清6 个执行入口按执行方式划分选型时只看两个维度要不要看输出、要不要提权或可见。使用场景入口方法关键特征需要拿到命令的文本输出GetCommandOutput隐藏窗口并等待退出退出码非 0 时返回空字符串发出去就不用管RunCommandVerb设为runas权限不足时请求 UAC不取结果删除受保护的深层文件RunCommandAsTrustedInstaller借权限最高的 TrustedInstaller 服务身份执行用户需要看到过程InvokeRunVisibleProcess可见窗口必要时切换到 TrustedInstaller 通道下一步依赖这一步的结果InvokeRunCommand隐藏窗口加await等退出适合串联流程命令里特殊字符太多RunEncodedPowerShell先转 Base64 再交给-EncodedCommand绕开引号地狱除 6 个入口外还有异步等待扩展方法WaitForExitAsync和清洗工具CleanCommand后文再说。主线走查一条命令如何以 TrustedInstaller 身份跑起来以 MemoryCleaner.cs 清理临时文件为例完整过程分四步。把命令交给通道。MemoryCleaner把一长串rd/del命令交给RunCommandAsTrustedInstaller调用方立刻返回真正的执行发生在后台。确认执行身份存活。执行器把缓存的服务进程号静态字段PID初始为 0传给TrustedInstaller.CreateProcessAsTrustedInstaller发现服务没起就先调StartTrustedInstallerService内部通过RunCommand执行sc config/sc start再用系统 P/Invoke 接口轮询服务状态最长等 30 秒Running 后把进程号写回PID。临时借用 SYSTEM 身份。ImpersonateSystem开启SeDebugPrivilege与SeImpersonatePrivilege两个特权仿冒当前会话 winlogon 进程的令牌短暂获得以 SYSTEM 身份拉进程的权利。以正确的名义拉子进程。通过PROC_THREAD_ATTRIBUTE_PARENT_PROCESS属性把子进程的父进程指定为 TrustedInstaller 服务进程命令就名正言顺地以 TrustedInstaller 名义运行结束后RevertToSelf()恢复原身份全程失败最多重试 3 次。完整实现在 TrustedInstaller.cs。PID字段的作用容易看漏它是一根接力棒写入之后任何通道都能复用已启动的服务不必再走一遍 30 秒轮询。两个不显眼的细节 非阻塞等待WaitForExitAsync。.NET Framework 时代的Process没有原生异步等待这里用TaskCompletionSource任务完成包装器加Exited事件实现完成后自动解绑事件GetCommandOutput/InvokeRunCommand才能await而不卡死 WPF 界面线程。多行参数压平CleanCommand。用户写的脚本参数常带换行和多余空格CleanCommand按行拆分、压缩连续空白再自动选或作分隔符合并多行命令就不会拼接变形。换个场景验证GTweak 自定义脚本如何跑通把.ps1、.bat、.cmd、.reg放进指定目录点击运行AddonsViewModel.cs 的链路是按扩展名映射解释器.reg→reg.exe import.ps1→ PowerShell 加-ExecutionPolicy Bypass其余 → cmd 的/k模式窗口保留输出可见。参数先经CleanCommand压平再交给InvokeRunVisibleProcess。若脚本标记需要管理员InvokeRunVisibleProcess内部改走 TrustedInstaller 通道完整复用上面四步提权链。这个类是货真价实的项目级公共设施激活模块 WinLicenseHandler.cs 的组合更花——Win10 下先借RunCommandAsTrustedInstaller修复.vbs关联awaitInvokeRunCommand跑slmgr.vbs装密钥RunCommand发出去就删旧票据最后GetCommandOutput读回激活结果MemoryCleaner、ServicesTweaks、ErrorLogger等近 20 个源文件引用的都是同一组方法。能带走的三条工程习惯 ✅先定义执行契约再写功能。把 隐藏/可见、同步/异步、普通/提权 组合成有限入口功能只挑方法谁也不在业务代码里 new 进程对象。旧 API 异步化有固定套路。TaskCompletionSource加事件回调记得在续用里解绑事件这一招对任何回调式 API 都适用。给所有异常留落脚点。每个方法用 try/catch 包住并交给 ErrorLogger 记录单条命令失败只留日志不拖垮界面。下次再点 GTweak 的清理按钮别只把它当按钮服务存活检查、借身份、静默执行、失败留痕全都由这个调度台办妥。你以后做按钮多、命令多的工具时不妨先造这么一条统一通道。【免费下载链接】GTweakPortable Tool for an Ideal Windows Setup项目地址: https://gitcode.com/GitHub_Trending/gt/GTweak创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑