C#-干净地关闭OpenVPN我们编写了一个应用程序,它位于控制OpenVPN的托盘中,作为对更大应用程序的扩展。如果在命令行运行openvpn.exe,可以按F4关闭。我们需要从C#发送相同的按键,但您只能将字符串值发送到StandardInput。我们被迫杀死OpenVpn以将其关闭,这似乎会导致Vista上偶尔出现蓝屏死机……这是我在MSDN上发表的一篇文章的链接,该文章也描述了这个问题:MSDN论坛上的任何人都知道如何使用StandardInput发送到进程特殊击键?或者更简洁的解决方法来关闭OpenVPN?更新:以下内容在传递给StandardInput.Write()时不起作用,即本示例中的F1键:我们已正确重定向输入/输出,因为我们可以毫无疑问地成功将用户名/密码传递给OpenVPN。更新2:在OpenVPN的文档中找到一些命令行选项:--serviceexit-event[0|1]应该在OpenVPN在这样的环境中被另一个程序自动化时使用,这样它就不能通过监视器或键盘访问与用户交互。通常,最终用户永远不需要明确使用此选项,因为当给定的OpenVPN配置作为服务运行时,它会由OpenVPN服务包装器自动添加。exit-event是Windows全局事件对象的名称,OpenVPN会持续监控这个事件对象的状态,并在收到信号时退出。第二个参数表示退出事件的初始状态,通常默认为0。同一个exit-event参数可以并发执行多个OpenVPN进程。在任何情况下,控制进程都可以发出退出事件信号,导致所有此类OpenVPN进程退出。我如何在C#中使用它?“退出事件”是否表明他们指的是互斥锁?如果我按如下方式运行OpenVPN:“openvpn.exe--configPathToMyConfig.ovpn--serviceMyEventName0”那么下面的C#代码会导致OpenVPN干净地退出:EventWaitHandleresetEvent=EventWaitHandle.OpenExisting("MyEventName");重置事件。放();支持声明的道具,他的评论帮助很大。StandardInput.Write(ConsoleKey.F4);显然,您必须获得StandardIn才能完成此过程。以上就是C#学习教程:C#-CleanlycloseallthecontentsharedOpenVPN.如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
