gpt4 book ai didi

C# - 干净地关闭 OpenVPN

转载 作者:太空宇宙 更新时间:2023-11-03 22:26:28 25 4
gpt4 key购买 nike

我们已经编写了一个应用程序,它位于控制 OpenVPN 的托盘中,作为对更大应用程序的扩展。

如果你在命令行运行openvpn.exe,你可以按F4关闭它。我们需要从 C# 发送相同的按键,但您只能将字符串值发送到 StandardInput。

我们被迫关闭 OpenVpn 以关闭它,这似乎导致 Vista 上不时出现蓝屏...

这是我在 MSDN 上的帖子的链接,该帖子也描述了该问题:MSDN Forums

有谁知道如何使用 StandardInput 将特殊击键发送到进程?

或者更干净地关闭 OpenVPN 的解决方法?

更新:

以下传递给 StandardInput.Write() 时不起作用,在此示例中为 F1 键:

  • ConsoleKey.F1
  • "\x70"(F1 的十六进制值)
  • Convert.ToChar((int)ConsoleKey.F1)

我们已经正确地重定向了输入/输出,因为我们可以毫无问题地成功地将用户名/密码传递给 OpenVPN。

更新 2:在 OpenVPN 的一些命令行选项文档中找到这个:

--服务退出事件 [0|1]当 OpenVPN 被另一个程序自动执行时,应该在无法通过显示器或键盘与用户交互的情况下使用。通常,最终用户永远不需要明确使用此选项,因为当给定的 OpenVPN 配置作为服务运行时,它会由 OpenVPN 服务包装器自动添加。exit-event 是Windows 全局事件对象的名称,OpenVPN 将持续监视此事件对象的状态,并在收到信号时退出。

第二个参数表示exit-event的初始状态,一般默认为0。

可以使用相同的退出事件参数同时执行多个 OpenVPN 进程。在任何情况下,控制进程都可以发出退出事件信号,导致所有此类 OpenVPN 进程退出。

我如何在 C# 中使用它? “退出事件”是否表示他们提到了互斥体?

最佳答案

如果我按以下方式运行 OpenVPN:

"openvpn.exe --config PathToMyConfig.ovpn --service MyEventName 0"

然后下面的 C# 代码会导致 OpenVPN 干净地退出:

EventWaitHandle resetEvent = EventWaitHandle.OpenExisting("MyEventName");

resetEvent.Set();

prop to consultutah,他的评论很有帮助。

关于C# - 干净地关闭 OpenVPN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1195210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com