Blenderがリモートデスクトップで起動しない?OpenGLエラーの原因と解決策を徹底解説で、コマンドプロンプトで「query session」コマンドを実行することにより、セッションIDを確認しました。
この処理をバッチファイルで自動化したかったのですが、できなかったので、VB.netでやってみることにしました。
目次
なぜVB.NETで「query session」を使いたいのか?
Blenderなど、一部のアプリケーションはRDP接続中には正常に起動できないことがあります。これを回避するには、物理コンソールセッションへ切り替える必要があり、そのためには現在のセッションIDを取得する必要があります。
手動でコマンドプロンプトから query session
を実行するのは煩雑です。これを自動化することで、Blender起動用ツールなども作成可能になります。
VB.NETでコマンドを実行するポイント
標準的な方法でプロセスを起動しようとしてもうまくいかないことがあります。特に、セキュリティ上の理由でユーザー名とパスワードの指定が必要となる場合が多いです。
VB.netでコマンドプロンプトを操作するだけだと思ったのですが、うまくいきませんでした。
試行錯誤した結果、ユーザー名とパスワードを設定して実行することでうまくいくことがわかりました。
VB.netで「query session」の結果を取得するコード
VB.NETからコマンドを実行するには、System.Diagnostics.ProcessStartInfo
を使用します。
ただし、query session
は管理者権限が必要であり、通常の実行方法ではアクセス拒否エラーが出る場合があります。
以下のコードでは、ユーザー名とパスワードを指定し、セキュアな方法で実行する仕組みになっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Dim sResult As String Dim psiA As New System.Diagnostics.ProcessStartInfo() Dim sCommand As String psiA.UserName = "[ユーザー名]" Dim sPWD As String = "[パスワード]" Dim ssPWD As New System.Security.SecureString() For Each c As Char In sPWD ssPWD.AppendChar(c) Next psiA.Password = ssPwd sCommand = "/c query session " psiA.FileName = System.Environment.GetEnvironmentVariable("ComSpec") psiA.RedirectStandardInput = False psiA.RedirectStandardOutput = True psiA.UseShellExecute = False psiA.CreateNoWindow = True psiA.Arguments = sCommand Dim p As Process = Process.Start(psiA) sResult = p.StandardOutput.ReadToEnd MessageBox.Show(sResult) |
得られた結果を処理すれば、Blenderをリモートデスクトップで起動するツールが作成できます。
注意点とセキュリティについて
-
パスワードは
SecureString
で保持しているとはいえ、ハードコードはセキュリティリスクがあるため、環境変数や外部ファイルから安全に取得する工夫が必要です。 -
プロセス実行には十分な権限が必要です。アプリケーションを「管理者として実行」するよう設定してください。
実行環境に関する補足
この処理はWindows OSに依存します。特に、ドメイン環境下やWindows Serverを利用している場合、セッション名や動作に若干の違いが出る場合があります。実環境での検証をおすすめします。
今後の拡張案
-
セッションIDの自動抽出とtsconコマンド実行を組み合わせることで、完全自動化されたBlender起動ツールを構築可能。
-
出力結果をリストボックスなどに表示し、ユーザーが選択して操作できるUIの作成も視野に入ります。
参考:tsconコマンドとは?
tscon
(Terminal Services CONnect)は、Windowsのセッションを制御するためのコマンドラインツールです。特に、リモートデスクトップ(RDP)接続中のセッションを、物理コンソールセッション(実機画面)へ切り替えるために使用されます。
🔹 使用目的
RDP環境では、仮想ディスプレイアダプターが使われるため、OpenGLなどのハードウェアアクセラレーションが正しく機能しないケースがあります。
このような場合、tscon
でセッションをローカル側に切り替えることで、制限を回避できることがあります。
🔹 基本的な使い方
例:セッションIDが2の場合
このコマンドを実行すると、現在のリモートセッションは切断され、アプリケーションはコンソールセッション上でそのまま動き続けます。
🔹 注意点
-
tscon
を使用するには管理者権限が必要です。 -
セッションIDは
query session
コマンドで確認できます。 -
実行中のセッションが切り替えられるため、リモート接続は一度切断されます。
🔹 活用例
-
Blenderや他の3DCGツールがRDP環境で起動できないとき
-
スクリプトやツールからセッション制御を自動化したいとき
-
仮想セッションの制限を回避して高負荷な処理を行いたいとき
このように、VB.NETで取得したセッションIDとtscon
コマンドを組み合わせることで、より高度な自動化ツールの構築が可能になります。今後の応用やツール開発のヒントとしてご活用ください。