如何在C#中程序化启动并关闭TunnelBear.exe?
在C#中程序化控制TunnelBear启动与关闭
问题分析
你当前代码的核心问题是Arguments参数错误:已经通过FileName指定了TunnelBear.exe的完整路径,不需要在Arguments里重复写程序名,只需传递对应的命令参数即可。
正确启动TunnelBear的代码
using System.Diagnostics; var startProcess = new Process { StartInfo = new ProcessStartInfo { FileName = @"C:\Program Files (x86)\TunnelBear\TunnelBear.exe", Arguments = "--on", // 仅传递启动参数,无需重复程序名 UseShellExecute = false, CreateNoWindow = true } }; startProcess.Start(); startProcess.WaitForExit(); // 可选:等待程序启动完成 startProcess.Close();
关闭TunnelBear的两种方法
方法1:使用官方命令行参数
和启动逻辑一致,传递--off参数即可:
using System.Diagnostics; var stopProcess = new Process { StartInfo = new ProcessStartInfo { FileName = @"C:\Program Files (x86)\TunnelBear\TunnelBear.exe", Arguments = "--off", UseShellExecute = false, CreateNoWindow = true } }; stopProcess.Start(); stopProcess.WaitForExit(); stopProcess.Close();
方法2:通过进程名终止进程
如果命令行参数无效,可以直接找到并终止TunnelBear进程:
using System.Diagnostics; // 获取所有TunnelBear进程 var tunnelBearProcesses = Process.GetProcessesByName("TunnelBear"); foreach (var process in tunnelBearProcesses) { process.Kill(); process.WaitForExit(); process.Close(); }
注意事项
- 确保程序运行时有足够权限(比如管理员权限,避免无法控制VPN进程)
- 如果
UseShellExecute设为true,可以不用指定完整路径,但需要确保TunnelBear在系统环境变量的PATH中 - 若需要捕获输出,可以保留
RedirectStandardOutput和RedirectStandardInput,但要注意处理异步读取避免死锁
内容的提问来源于stack exchange,提问作者OFNEILL
相关产品推荐
相关产品推荐

