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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.28079 の関連記事表示

<< 0 >>
■28079  Re[5]: システム情報 ツールの情報をエクスポートするには?
□投稿者/ ぽぴ王子 -(2008/11/19(Wed) 15:33:49)
>
    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);
        }
    
    もう少しつっこむところはあるかとは思いますが、とりあえずこんな感じです。
記事No.28058 のレス /過去ログ51より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -