より大きなアプリケーションの拡張機能として、OpenVPN を制御するトレイに収まるアプリケーションを作成しました。
コマンド ラインで openvpn.exe を実行する場合は、F4 キーを押して閉じることができます。C# から同じキープレスを送信する必要がありますが、StandardInput には文字列値しか送信できません。
OpenVpnを強制終了して閉じる必要があり、これがVistaで時々BSODを引き起こしているようです...
この問題についても説明している MSDN の私の投稿へのリンクを次に示します: MSDN フォーラム
StandardInput を使用して特別なキーストロークを Process に送信する方法を知っている人はいますか?
それとも、OpenVPN をよりきれいに閉じるための回避策でしょうか?
アップデート:
以下は、StandardInput.Write() に渡されると機能しません。この例では F1 キーが使用されています。
- ConsoleKey.F1
- "\x70" (F1 の 16 進値)
- Convert.ToChar((int)ConsoleKey.F1)
ユーザー名/パスワードを OpenVPN に問題なく渡すことができるため、入力/出力は既に適切にリダイレクトされています。
更新 2: OpenVPN のいくつかのコマンド ライン オプション ドキュメントでこれを見つけました:
--service exit-event [0|1] OpenVPN が別のプログラムによって自動的に実行され、ディスプレイやキーボードを介したユーザーとの対話が不可能な場合に使用する必要があります。一般に、特定の OpenVPN 構成がサービスとして実行されているときに OpenVPN サービス ラッパーによって自動的に追加されるため、エンド ユーザーがこのオプションを明示的に使用する必要はありません。exit-event は Windows グローバル イベント オブジェクトの名前であり、OpenVPN はこのイベント オブジェクトの状態を継続的に監視し、シグナル状態になると終了します。
2 番目のパラメータは exit-event の初期状態を示し、通常はデフォルトで 0 になります。
同じ exit-event パラメータを使用して、複数の OpenVPN プロセスを同時に実行できます。いずれにせよ、制御プロセスは終了イベントを通知し、そのようなすべての OpenVPN プロセスを終了させることができます。
これを C# でどのように使用しますか? 「終了イベント」は、ミューテックスに言及していることを示していますか?