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

わんくま同盟

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

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


(過去ログ 51 を表示中)
■28079 / )  Re[5]: システム情報 ツールの情報をエクスポートするには?
□投稿者/ ぽぴ王子 (411回)-(2008/11/19(Wed) 15:33:49)
ぽぴ王子 さんの Web サイト
No28076 (.SHO さん) に返信
> ■No28063 (まぐねしうむ さん) に返信
>>また、ご指摘の箇所を書き換えてpsi.Argumentsの中を確認したところ
>>"\"%CommonProgramFiles%\\Microsoft Shared\\MSInfo.\\msinfo32.exe\" /c /report \"C:\\msinfo.log\" /categories +all"
>>となっております。
> 
> で本題ですが…^^;
> 
> Console.WriteLine(psi.Arguments);
> で上記のようになったわけですよね。
> 
> 一番最初の「"」とかいらないし、「"」をエスケープする「\」もいらなくないですか?

一番最初の「"」と、エスケープするための「\」は勝手に出力されるものです。
IDE を使用されていないとのことなので、ご存知ではないかと思いますが。

なんだか(私を含め)スレ主さんを混乱させてしまう投稿があったようなので、もう一度まとめてみます。

・msinfo32.exe は /report ファイル名 で指定したファイルにレポートを出力するので、標準出力には
 何も出力されない。
 その代わり、exit code として 1 または 0 を返す。

・コマンドプロンプト cmd.exe へのパラメータでファイルを実行させるには /c スイッチが先頭に必要。

・%CommonProgramFiles% は自動的には展開されない。

・MSInfo. ではなく MSInfo である。

以上をふまえると、コマンドラインはこんな感じになります。

    ProcessStartInfo psi = new ProcessStartInfo();
    // ComSpecのパスを取得する
    psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec");

    // 出力を読み取れるようにする
    psi.RedirectStandardInput = false;
    psi.RedirectStandardOutput = true;
    psi.UseShellExecute = false;
    // ウィンドウを表示しないようにする
    psi.CreateNoWindow = true;
    // CommonProgramFilesフォルダを取得
    string commonProgramFiles = System.Environment.GetEnvironmentVariable("CommonProgramFiles");
    // コマンドラインを指定
    psi.Arguments = "/c \"" + commonProgramFiles + @"\Microsoft Shared\MSInfo\msinfo32.exe\" /report \"" + strPath + "\" /categories +all";
    /* strPath は ダブルクォーテーションを含まない形にする */

    // 起動
    System.Diagnostics.Process p = System.Diagnostics.Process.Start(psi);
    p.WaitForExit();

    if (p.ExitCode == 0)
    {
        string result = File.ReadAllText(strPath);

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

もう少しつっこむところはあるかとは思いますが、とりあえずこんな感じです。

返信 編集キー/


管理者用

- Child Tree -