2017-07-27 3 views
0

を返さないことがありますが、このコードは正常に動作しますが、通常はシェルウィンドウに表示される返されたテキストは取得できません。ここで私は、コマンドを実行して結果をリードバックするために使用するコードは次のとおりです。VB.Netシェル出力は、すべてのmy shellコマンドの99%に対して

Function RunCommandCom(command As String, arguments As String) As String() 
 

 
Dim p As Process = New Process() 
 
Dim pi As ProcessStartInfo = New ProcessStartInfo() 
 
Dim output As String 
 

 
pi.Arguments = " " + "/c" + " " + command + " " + arguments 
 
pi.FileName = "cmd.exe" 
 
pi.RedirectStandardOutput = True 'pi.CreateNoWindow = True 
 
pi.WindowStyle = ProcessWindowStyle.Normal 
 
pi.UseShellExecute = False 
 
p.StartInfo = pi 
 
p.Start() 
 
output = p.StandardOutput.ReadToEnd() 
 
p.WaitForExit() 
 
p.Close() 
 

 
If output Is "" 
 
Then 
 
Return Nothing 
 
Else 
 
Return output.Replace(Chr(13), "").Split(Chr(10)) 
 
End If 
 

 

 
End Function

問題を作成するコマンドが細かい実行されます。それはデータベースにエントリを作成しなければなりません。これは私のファンクションを呼んだ後に定義的に存在します。シェルで直接コマンドを実行すると、同じエントリが生成され、返されたテキストが表示されます。

ストリームリーダーがこの1つの特別なコマンドのために何も読み込み/格納しない理由を知っている人はいますか?

+0

同じ問題を引き起こす別のコマンドを特定しました。両方とも何らかの形で「作成」コマンドであり、他のコマンドよりも時間がかかることがあります。マイグレーションは問題の理由ですか? –

+0

両方のプログラムが実際にstdoutに書き込むことは確かですか?どちらも常に何も返さないのですか? –

+0

私はそう思っています。私が入力したのは、私のコードがcmd.exeに送信するのとまったく同じで、後で同じデータをデータベースで見ることができるからです。 シェルウィンドウに表示されているテキスト 両方のコマンドで、stoudtストリームを読み込むときに空の文字列が表示されます stoudtストリームには、通常シェルウィンドウに表示されるものが含まれています。 –

答えて

0

Arg。私は問題を発見した。これらの2つのコマンドは、その出力をStandardErrorストリームに送信します。私は何故エラーが発生しなかったのか、理由を知らない。

関連する問題