• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:.NET Frameworkでコマンドライン実行)

.NET Frameworkでコマンドライン実行

このQ&Aのポイント
  • VC++2008 C++/CLI .NET Framework 2.0以降を使用しています。コマンドラインを実行する方法について教えてください。
  • System.Diagnostics.ProcessクラスのStartメソッドを使用してコマンドラインを実行する方法を教えてください。
  • バッチファイルを作成する前に、.NET Frameworkを使用してコマンドラインを実行する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

processHoge->Start("C:\\hoge\\hoge.exe", "ArgA ArgB ArgC"); とする、もしくは processHoge->StartInfo->FileName = "C:\\hoge\\hoge.exe"; processHoge->StartInfo->Arguments = "ArgA ArgB ArgC"; processHoge->Start(); とすればいいのでは。 これがダメな理由が何かあるんでしょうか? CreateProcess()もMSDN Libraryを読む限りでは ::CreateProcess(NULL, "C:\\hoge\\hoge.exe ArgA ArgB ArgC", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ); と ::CreateProcess("C:\\hoge\\hoge.exe", "ArgA ArgB ArgC", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ); は同等動作に見えるのですが。 #ついでに::CreateProcess("C:\\hoge\\hoge.exe ArgA ArgB ArgC", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi );も

FAY
質問者

お礼

あう。おっしゃる通りです。 > processHoge->StartInfo->FileName = "C:\\hoge\\hoge.exe"; > processHoge->StartInfo->Arguments = "ArgA ArgB ArgC"; > processHoge->Start(); で動きました。 ・・・がDOSウィンドウが開いてしまいますね・・・ もうちょっと調査してみます。 締切はもうしばしお待ちください。

FAY
質問者

補足

どうやら下のDOSウィンドウが開いてしまうのは 立ち上げているアプリケーション固有の問題のようです。 というわけでとりあえずの目的は達成できました。 ありがとうございました。 #お礼欄と補足欄の記入位置が逆になってしまい申し訳ありません

その他の回答 (1)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

アプリケーションに渡すオプションをどう指定してやるか、って事でいいですか? であれば、↓の一番上のプロパティを参照。 http://msdn.microsoft.com/ja-jp/library/system.diagnostics.processstartinfo_members.aspx まぁProcess.Start()で直接渡すこともできるようですが。 http://msdn.microsoft.com/ja-jp/library/system.diagnostics.process.start.aspx

FAY
質問者

補足

回答ありがとうございます。 いえ、Processクラスの基本的な使い方は サンプルもありますし、なんとなくはわかるんです。 元のVC++6.0のコードは STARTUPINFO si; PROCESS_INFORMATION pi; ::ZeroMemory(&si, sizeof(STARTUPINFO)); ::ZeroMemory(&pi, sizeof(PROCESS_INFORMATION)); si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_HIDE; CString szCommand = "C:\\hoge\\hoge.exe ArgA ArgB ArgC"; ::CreateProcess(NULL, (LPSTR)(LPCTSTR)szCommand, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ); というような内容のコードです(思いっきり省略してますが...)。 それに対して今回は String^ stringCommand = "C:\\hoge\\hoge.exe ArgA ArgB ArgC"; Process^ processHoge = gcnew Process; processHoge->StartInfo->CreateNoWindow = true; // StartInfoにコマンドラインを指定するメンバがない GhostScriptProcess->Start(); としているのですが、上のコメントの通り、 StartInfoにコマンドラインを指定するメンバがないためどうしたらいいのかなと。 それで、せっかく.NET Frameworkを使うので元のコードを実装したくないんです。 また、stringCommandの内容をバッチファイルに出力し、 processHoge->StartInfo->FileName = "Hoge.bat" というように設定してやればできるんですが、 バッチファイルを使用するとDOS窓が出てしまのうので、これも なるべくしたくないんです。 Processクラスにこだわるつもりはないので、 他の方法でもやり方があれば教えていただきたいです。