アプリ版:「スタンプのみでお礼する」機能のリリースについて

VB.NETでバッチファイルを使わずにDOSコマンドの複数実行をしたいのですが、
試しに
Dim results As String

'ComSpecのパスを取得する
psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec")
'出力を読み取れるようにする
psi.RedirectStandardInput = False
psi.RedirectStandardOutput = True
psi.UseShellExecute = False
'ウィンドウを表示しないようにする
psi.CreateNoWindow = True
'コマンドラインを指定("/c"は実行後閉じるために必要)
'psi.Arguments = "/c " & asCmd & " /w"
psi.Arguments = "/c " & "CD C:\" & " /w"

'起動
p = System.Diagnostics.Process.Start(psi)
'出力を読み取る
results = p.StandardOutput.ReadToEnd


'出力された結果を表示
Console.WriteLine(results)

psi.Arguments = "/c " & "DIR" & " /w"

'起動
p = System.Diagnostics.Process.Start(psi)
'出力を読み取る
results = p.StandardOutput.ReadToEnd


'出力された結果を表示
Console.WriteLine(results)
'WaitForExitはReadToEndの後である必要がある
'(親プロセス、子プロセスでブロック防止のため)
p.WaitForExit()

というプログラムを作成したのですが、DIRは実行されるのですが、
Cドライブに移動ができません。
  何が悪いのでしょうか?
実現できる方法があればご教授ください。

A 回答 (1件)

原因は最初に起動したプロセスが CD C:\ を実行して終了してしまうためです


2度目のに起動された cmd.exe(またはcommand.com)は初期状態で起動されてしまいます
したがってDIRコマンドは意図したフォルダーで実行されません

DOSコマンドを複数実行したいなら &&でつなぎましょう
psi.Arguments = "/c " & "CD C:\" & " && dir /w"
といった具合です

デバッグ段階では
psi.CreateNoWindow = False
のようにドス窓を表示するようにしていた方がいいように思います
    • good
    • 1
この回答へのお礼

回答ありがとうございます。&&でつなげれば出力されるようになりました。

お礼日時:2008/09/22 16:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A