C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

VB.NETからWSLを使う方法

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■97613 / inTopicNo.1)  VB.NETからWSLを使う方法
  
□投稿者/ むず (2回)-(2021/06/14(Mon) 11:37:59)

分類:[.NET 全般] 

VB.NETからWSLを使いたいと考えています。


http://www.ria-lab.com/archives/1449

このページに実行方法が記載されています。

いま、私がやりたいのは、

まず、WSLのウインドウを表示し、

cd /mnt/d/aaa/bbb
で作業フォルダーを、実行ファイルの入ったフォルダーに移動する。

make run
で実行ファイルを実行する。

そして、そのままウインドウを閉じずに結果を表示したままにする。

ということです。


そのため、URLのコードを以下のように修正して実行してみました。

Dim psi As New ProcessStartInfo()

' WSLのディストリビューション(ubuntu、ubuntu1804など)
psi.FileName = "ubuntu2004"
' WSL上で実行するコマンド(実行したい部分をダブルクオーテーションで囲む)
psi.Arguments = "run ""cd /mnt/d/aaa/bbb"" ""make run"" "

' リダイレクト設定(標準出力のリダイレクト)
psi.RedirectStandardInput = False
psi.RedirectStandardOutput = False
psi.RedirectStandardError = False

' シェル使用し、ウィンドウ表示あり
psi.UseShellExecute = True
psi.CreateNoWindow = False

Process.Start(psi)

しかし、コマンドラインのウインドウは一瞬だけ表示されてすぐに閉じてしまいます。

psi.Argumentsを空にするとウインドウだけは表示されるので、
コード自体は間違っていないと思います。

どのように修正すれば良いでしょうか?



引用返信 編集キー/
■97615 / inTopicNo.2)  Re[1]: VB.NETからWSLを使う方法
□投稿者/ Hongliang (1180回)-(2021/06/14(Mon) 13:09:10)
WSLは使っていないので、回答ではない一般論しか示せませんが…。

> まず、WSLのウインドウを表示し、
>
> cd /mnt/d/aaa/bbb
> で作業フォルダーを、実行ファイルの入ったフォルダーに移動する。
>
> make run
> で実行ファイルを実行する。
>
> そして、そのままウインドウを閉じずに結果を表示したままにする。
>
> ということです。

"ウィンドウを閉じず"というのは、とにかくプロンプトが残ればいいのか、Ubuntuのシェルが残る必要があるのか、どっちでしょうか。

前者であれば、cmd.exeを介して実行し、cmd.exeのプロンプトウィンドウを残すようにすればいいかと思います。
.FileName = "cmd.exe"
.Arguments = "/S /K """"ubuntu2004 run ""cd /mnt/d/aaa/bbb"" ""make run"" """""
こんな感じになるのかな?
// 引用符周りは詳しくないです…。

後者であれば、そもそもこれはコマンドプロンプト上で実現可能なのでしょうか?
コマンドプロンプトで、
ubuntu2004 run "いろいろコマンド"
としたときに、Ubuntuのシェルは残りますか?
残らないのであれば、Processから実行しても変わらず残らないことになります。
ubuntu2004.exeのコマンドラインオプションに、指定したコマンドを実行した後シェルを残すオプションがあればいいのですが、どうなんでしょう?
引用返信 編集キー/
■97618 / inTopicNo.3)  Re[2]: VB.NETからWSLを使う方法
□投稿者/ むず (3回)-(2021/06/14(Mon) 14:53:36)
ありがとうございます。

.Arguments = "/S /K """"ubuntu2004 run ""cd /mnt/d/aaa/bbb"" ""make run"" """""

これだと

'"ubuntu2004 run "cd' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。


というエラーが出てしまいます。

そもそも、コマンドライン上で
ubuntu2004 run
を実行するとWSL内に入れますが、
ubuntu2004 run "cd /mnt/d/aaa/bbb""
を実行するとエラーが出るだけ
WSL内に入ることすらできないのですが・・・・


引用返信 編集キー/
■97620 / inTopicNo.4)  Re[3]: VB.NETからWSLを使う方法
□投稿者/ むず (5回)-(2021/06/14(Mon) 21:38:57)
ubuntu2004 run "/mnt/d/aaa/bbb && make run"

でうまくいきました。

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ