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

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

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

全過去ログを検索

<< 0 | 1 | 2 >>
■3424  Re[13]: ★わんくま8月勉強会&TechEd検討会
□投稿者/ えムナウ -(2007/05/10(Thu) 01:27:38)
    BoFネタは2つだから。
    Native VS. Managed なディベートを形を変えて
    C++ C# VB.Net VB6 をいろんな視点から比較するってのはどう?
    集まった人のユーザー人口とかコーディングできる人の数とかも含めて。
    いろんな視点の内容が充実したら75分ユーザー巻き込み型でできるかもしれません。

    よい点悪い点的な切り口じゃない方向で。
記事No.2536 のレス /過去ログ12より / 関連記事表示
削除チェック/

■20185  Re[14]: ディレクトリの排他アクセス
□投稿者/ れい -(2008/06/07(Sat) 11:31:09)
    No20164 (ネタ好き さん) に返信
    > ですから、カーネルがディレクトリの共有を使用していても、ポリシーとして開発者には触らせないのではないでしょうか?(もちろん互換性の問題もあると思います)
    > マイクロソフトの気持ちを推測すると、へっぽこ開発者がディレクトリをロックしてしまえば、当然色々不都合が在ります。それにファイルをロックしてしまえば、その代替はある程度可能なのですから、へっぽこ開発者が犯す危険よりも利点が少ないと判断しているのでしょう。

    なぜ、ディレクトリのハンドルに対してだけそう判断したのかが分かりません。
    そのポリシーが聞きたいです。
    APIでShutdownやプロセス削除すらできます。
    ちょっと変なWindowsメッセージを送るだけでクラッシュするような状態なのに、
    たかがディレクトリのハンドルをいじらせないようにする理由にはならないでしょう。

    > 無論これではアプリが想定していないファイルはロックできないでしょうが、そもそもアプリが把握していないファイルをロックするのは危険なので、それでもいいのでは無いでしょうか?

    「そもそもアプリが把握していないファイルをロックするのは危険」
    そうでしょうかねぇ?

    それはそんな行為をするアプリが危険なんではないでしょうか?

    ユーザーモードのアプリケーションが行儀が悪い動作をしたり、悪意があったりする場合に、
    OSがどう対応するべきなのか、
    というのに関しては、未だ一般的解決法はありません。
    どのOSも模索状態だと思います。

    それを意識してAPI設計したとは思えません。
記事No.19998 のレス /過去ログ40より / 関連記事表示
削除チェック/

■28058  システム情報 ツールの情報をエクスポートするには?
□投稿者/ まぐねしうむ -(2008/11/19(Wed) 13:46:14)

    分類:[C#] 

    いつもお世話になっております。
    早速ですが、C#からmsinfo32.exeをコマンドプロンプトから
    呼び出し、引数を使いシステム情報をファイルに出力しようと考えています。

    具体的には、コマンドプロンプト上で
    "%CommonProgramFiles%\Microsoft Shared\MSInfo.\msinfo32.exe" /report C:\msinfo.log /categories +all
    を打つと、自動的にシステム情報を出力してくれますが
    これを、C#上でボタンを押すだけで出力しよう考えておりますが
    なぜか、出力されません。

    考えられる要因がpsi.Argumentsのコマンドの中身位なのですが
    MsgBoxで中身を確認しましたが、同じように見えます。

    何がまずいんでしょうか?
    よろしければどなたかアドバイスください。

    ◆書いたコード

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

    //出力を読み取れるようにする
    psi.RedirectStandardInput = false;
    psi.RedirectStandardOutput = true;
    psi.UseShellExecute = false;
    //ウィンドウを表示しないようにする
    psi.CreateNoWindow = true;
    //コマンドラインを指定
    psi.Arguments = '"' + @"%CommonProgramFiles%\Microsoft Shared\MSInfo.\msinfo32.exe" + '"' + " /report " + strPath + @" /categories +all";

    //起動
    System.Diagnostics.Process p = System.Diagnostics.Process.Start(psi);
    //出力を読み取る
    string results = p.StandardOutput.ReadToEnd();
    //WaitForExitはReadToEndの後である必要がある
    //(親プロセス、子プロセスでブロック防止のため)
    p.WaitForExit();

    //出力された結果を表示
    Console.WriteLine(results);
親記事 /過去ログ51より / 関連記事表示
削除チェック/

■28060  Re[1]: システム情報 ツールの情報をエクスポートするには?
□投稿者/ ぽぴ王子 -(2008/11/19(Wed) 14:08:13)
>
    No28058 (まぐねしうむ さん) に返信

    > //コマンドラインを指定
    > psi.Arguments = '"' + @"%CommonProgramFiles%\Microsoft Shared\MSInfo.\msinfo32.exe" + '"' + " /report " + strPath + @" /categories +all";

    これ、このままじゃコンパイルすら通らないような気がしますが、ミニマムコードとして
    成立していますか?

    あと、 strPath もダブルクォートで囲む必要があるし、コマンドラインの先頭には " /c "
    を追加した方がよいと思います。
記事No.28058 のレス /過去ログ51より / 関連記事表示
削除チェック/

■28063  Re[2]: システム情報 ツールの情報をエクスポートするには?
□投稿者/ まぐねしうむ -(2008/11/19(Wed) 14:16:31)
    ぽぴ王子 さん返信有難うございます
    
    > これ、このままじゃコンパイルすら通らないような気がしますが、ミニマムコードとして
    > 成立していますか?
    VS2005 Sp1を使っていますがコンパイル自体は通ります。
    
    また、ご指摘の箇所を書き換えてpsi.Argumentsの中を確認したところ
    "\"%CommonProgramFiles%\\Microsoft Shared\\MSInfo.\\msinfo32.exe\" /c /report \"C:\\msinfo.log\" /categories +all"
    となっております。
    
    
記事No.28058 のレス /過去ログ51より / 関連記事表示
削除チェック/

■28076  Re[3]: システム情報 ツールの情報をエクスポートするには?
□投稿者/ .SHO -(2008/11/19(Wed) 15:10:50)
    No28063 (まぐねしうむ さん) に返信
    > また、ご指摘の箇所を書き換えてpsi.Argumentsの中を確認したところ
    > "\"%CommonProgramFiles%\\Microsoft Shared\\MSInfo.\\msinfo32.exe\" /c /report \"C:\\msinfo.log\" /categories +all"
    > となっております。

    で本題ですが…^^;

    Console.WriteLine(psi.Arguments);
    で上記のようになったわけですよね。

    一番最初の「"」とかいらないし、「"」をエスケープする「\」もいらなくないですか?
記事No.28058 のレス /過去ログ51より / 関連記事表示
削除チェック/

■28078  Re[3]: システム情報 ツールの情報をエクスポートするには?
□投稿者/ .SHO -(2008/11/19(Wed) 15:33:16)
    No28063 (まぐねしうむ さん) に返信

    > また、ご指摘の箇所を書き換えてpsi.Argumentsの中を確認したところ
    > "\"%CommonProgramFiles%\\Microsoft Shared\\MSInfo.\\msinfo32.exe\" /c /report \"C:\\msinfo.log\" /categories +all"
    > となっております。

    それから、/c の位置が間違ってます。
    これだと動きません。
    /c は一番最初です。
記事No.28058 のレス /過去ログ51より / 関連記事表示
削除チェック/

■28086  Re[3]: システム情報 ツールの情報をエクスポートするには?
□投稿者/ ぽぴ王子 -(2008/11/19(Wed) 16:26:28)
>
    No28084 (まぐねしうむ さん) に返信
    
    > そのままCopyしましたが
    > psi.Arguments = "/c \"" + commonProgramFiles + @"\Microsoft Shared\MSInfo\msinfo32.exe\" /report \"" + strPath + "\" /categories +all";
    >                                                                                                  ~~~~
    > 「文字 '\' は予期されていません。」が表示されます。
    
    えっと、自分で書いておきながらアレですが、提示したコードはテストしていません。
    なので動かない部分もあるかと思います。申し訳ないです。
    
    > もしかして、No28058 でも指摘されていましたが
    > SP1とSPなしでは動きが違うのでしょうか?
    > それとも、こちらの実行環境が壊れているのでしょうか?
    
    No28058 での指摘ですが、これも別のプロジェクトで記述してみたところ、 '"' で大丈夫なようでした。
    申し訳ないです。
    
    もう一度調べてみましたが、/report の引数の部分はダブルクォートで囲んでしまうと終了コードが 1 で返る、つまり
    エラーと見なされているようです。
    むむむ、これも私が混乱させてしまったようです。申し訳ないです。
    
    > あと、細かい事ですが
    > string result = File.ReadAllText(strPath);
    > 
    > //出力された結果を表示
    > Console.WriteLine(results);
    >                   ~~~~~~~
    >                   result ですよね
    
    そうです。テストしていないので間違えています。申し訳ないです。
記事No.28058 のレス /過去ログ51より / 関連記事表示
削除チェック/

■28087  Re[4]: システム情報 ツールの情報をエクスポートするには?
□投稿者/ まぐねしうむ -(2008/11/19(Wed) 16:50:16)
    2008/11/19(Wed) 16:51:27 編集(投稿者)

    No28085 (魔界の仮面弁士 さん) に返信

    確認してみました。

    ・C:\test.batを作成
    中に
    cmd.exe /c "C:\Program Files\Common Files\Microsoft Shared\MSInfo\msinfo32.exe" /report "C:\msinfo.log" /categories +all
    と記載したところ

    「'C:\Program' は、内部コマンドまたは外部コマンド、
     操作可能なプログラムまたはバッチファイルとして認識されていません。」

    のエラーが表示されます。
    また、/cを外して確認したコマンドラインで確認した所
    cmd.exe "C:\Program Files\Common Files\Microsoft Shared\MSInfo\msinfo32.exe" /report "C:\msinfo.log" /categories +all

    何故か
    「'eport'は内部コマンドまたは外部コマンド、
     操作可能なプログラムまたはバッチファイルとして認識されていません。」
    となります。

    後1点訂正させてください。
    >psi.Argumentsの中身は
    >"/c \"C:\\Program Files\\Common Files\\Microsoft Shared\\MSInfo\\msinfo32.exe\" /report \"C:\\msinfo.log\" /categories +all"
    >になります。
    >これをコマンドプロンプト上に貼り付けて実行した所
    >ファイルが作成されますので、コマンドライン自体は問題ないと思います。
    ですが、コマンドプロンプトに貼り付けたコマンドラインは
    "C:\Program Files\Common Files\Microsoft Shared\MSInfo\msinfo32.exe" /report "C:\msinfo.log" /categories +all
    になります。
    先頭に/c をつけていませんでした。
記事No.28058 のレス /過去ログ51より / 関連記事表示
削除チェック/

■28088  Re[5]: システム情報 ツールの情報をエクスポートするには?
□投稿者/ .SHO -(2008/11/19(Wed) 17:01:42)
    No28087 (まぐねしうむ さん) に返信
    > ■No28085 (魔界の仮面弁士 さん) に返信
    > 確認してみました。

    魔界の仮面弁士さんの解答は正論ですが、とりあえずまず
    ぽぴ王子さんの

    >/report の引数の部分はダブルクォートで囲んでしまうと終了コードが 1 で返る

    を確認してみた方が良くないですか?
記事No.28058 のレス /過去ログ51より / 関連記事表示
削除チェック/

■28090  Re[6]: システム情報 ツールの情報をエクスポートするには?
□投稿者/ まぐねしうむ -(2008/11/19(Wed) 17:38:22)
    No28088 (.SHO さん) に返信

    > >/report の引数の部分はダブルクォートで囲んでしまうと終了コードが 1 で返る
    > を確認してみた方が良くないですか?
    上記箇所を修正した所、動作しました。
    psi.Arguments = "/c \"" + commonProgramFiles + @"\Microsoft Shared\MSInfo\msinfo32.exe" + '"' + " /report " + strPath + " /categories +all";

    コマンドラインは
    /c "C:\Program Files\Common Files\Microsoft Shared\MSInfo\msinfo32.exe" /report C:\msinfo.log /categories +all
    になります。

    ただし、C:\Documents and Settingsのように中にスペースが入っている
    フォルダ名を指定すると、
     「アクセスが拒否されました。」
    と言うダイアログが表示されます。

    ただ、今回のケースではあくまでもシステム情報を出力できるかを
    確認したかったので問題なしとし、解決にしたいと思います。

    皆様お手数おかけしましたが
    本当にありがとうございました。

記事No.28058 のレス / END /過去ログ51より / 関連記事表示
削除チェック/

■28096  Re[5]: システム情報 ツールの情報をエクスポートするには?
□投稿者/ 魔界の仮面弁士 -(2008/11/19(Wed) 18:33:08)
    /report パラメータのパスも、「"」で囲まないと駄目なハズ。
    
    ■No28087 (まぐねしうむ さん) に返信
    > ・C:\test.batを作成
    > 中に
    > cmd.exe /c "C:\Program Files\Common Files\Microsoft Shared\MSInfo\msinfo32.exe" /report "C:\msinfo.log" /categories +all
    > と記載したところ
    
    
    そうではなく、/C パラメータそのものを囲って
    
    cmd.exe /c ""C:\Program Files\Common Files\Microsoft Shared\MSInfo\msinfo32.exe" /report "C:\msinfo.log" /categories +all"
    
    と書くか、もしくは空白をエスケープ文字(^)で処理して
    
    cmd.exe /c "C:\Program^ Files\Common^ Files\Microsoft^ Shared\MSInfo\msinfo32.exe /report C:\msinfo.log /categories +all"
    
    と書く必要があるかと。
    
    
    C# で書くと、こんな感じ。
    
    using System;
    using System.Diagnostics;
    
    class Class1
    {
        static void Main()
        {
            // 空白を含むパス
            string strPath = @"C:\a b c.log";
    
            ProcessStartInfo psi = new ProcessStartInfo();
            psi.FileName = psi.EnvironmentVariables["ComSpec"];
            psi.RedirectStandardInput = false;
            psi.RedirectStandardOutput = true;
            psi.UseShellExecute = false;
            psi.CreateNoWindow = true;
            string commonProgramFiles = psi.EnvironmentVariables["CommonProgramFiles"];
            psi.Arguments = String.Format(@"/C """"{0}"" /report ""{1}"" /categories +all""",
                commonProgramFiles + @"\Microsoft Shared\MSInfo\msinfo32.exe",
                strPath);
            Process p = Process.Start(psi);
            string results = p.StandardOutput.ReadToEnd();
            p.WaitForExit();
            Console.WriteLine(results);
            Console.ReadKey();
        }
    }
    
    
    >>psi.Argumentsの中身は
    >>"/c \"C:\\Program Files\\Common Files\\Microsoft Shared\\MSInfo\\msinfo32.exe\" /report \"C:\\msinfo.log\" /categories +all"
    >>になります。
    これは、ツールチップ中の虫眼鏡アイコンからの [テキスト ビジュアライザ]ウィンドウで表示すると、
    『/c "C:\Program Files\Common Files\Microsoft Shared\MSInfo\msinfo32.exe" /report "C:\msinfo.log" /categories +all』
    として表示されるということですね。
記事No.28058 のレス / END /過去ログ51より / 関連記事表示
削除チェック/

■28095  Re[4]: システム情報 ツールの情報をエクスポートするには?
□投稿者/ Jitta on the way -(2008/11/19(Wed) 18:30:55)
    2008/11/19(Wed) 18:32:25 編集(投稿者)

    No28086 (ぽぴ王子 さん) に返信

    > もう一度調べてみましたが、/report の引数の部分はダブルクォートで囲んでしまうと終了コードが 1 で返る、つまり
    > エラーと見なされているようです。
    > むむむ、これも私が混乱させてしまったようです。申し訳ないです。

    /report を囲んじゃいけないが、その次は囲まなきゃいけない。


    で、なぜ + 演算子を使う? string.Format 使えば、ダブル クォーテーションで醜いのが回避出来るじゃないか。

    それと、"文字列" と、'文字' に注意。


    追加

    cmd.exe を通す必要はないよね?
記事No.28058 のレス / END /過去ログ51より / 関連記事表示
削除チェック/

■28097  Re[5]: システム情報 ツールの情報をエクスポートするには?
□投稿者/ 魔界の仮面弁士 -(2008/11/19(Wed) 18:42:32)
    No28095 (Jitta on the way さん) に返信
    > 追加
    > cmd.exe を通す必要はないよね?

    おおう。元のコードを引きずってしまっていました。迂闊。
    cmd.exe 不要となれば、こうなるかな。


    ProcessStartInfo psi = new ProcessStartInfo();
    psi.FileName = Path.Combine(
     psi.EnvironmentVariables["CommonProgramFiles"],
     @"Microsoft Shared\MSInfo\msinfo32.exe");
    psi.Arguments = String.Format(@"/report ""{0}"" /categories +all", strPath);
記事No.28058 のレス / END /過去ログ51より / 関連記事表示
削除チェック/

■28064  Re[2]: システム情報 ツールの情報をエクスポートするには?
□投稿者/ .SHO -(2008/11/19(Wed) 14:18:19)
    No28060 (ぽぴ王子 さん) に返信

    > あと、 strPath もダブルクォートで囲む必要があるし…

    strPath は、別のところでパスの宣言を忘れてるだけでしょう。
    ダブルクォートで囲ったら変です。
記事No.28058 のレス /過去ログ51より / 関連記事表示
削除チェック/

■28062  Re[1]: システム情報 ツールの情報をエクスポートするには?
□投稿者/ みきぬ -(2008/11/19(Wed) 14:16:22)
記事No.28058 のレス /過去ログ51より / 関連記事表示
削除チェック/

■28065  Re[1]: システム情報 ツールの情報をエクスポートするには?
□投稿者/ .SHO -(2008/11/19(Wed) 14:20:27)
    No28058 (まぐねしうむ さん) に返信

    これ、そもそも msinfo32 は、処理結果を /report で指定された
    ファイルに出力するのであって、標準出力に吐き出すわけではないので
    取れるわけないです。
記事No.28058 のレス /過去ログ51より / 関連記事表示
削除チェック/

■28066  Re[2]: システム情報 ツールの情報をエクスポートするには?
□投稿者/ まぐねしうむ -(2008/11/19(Wed) 14:29:11)
    >※回答ではなくて、追加情報です。
    ご指摘の通り、参考というか丸パクリさせていただいています。
    あくまでも、コマンドプロンプトを通して
    情報が出力できるか確認したかったもので・・・

    >strPath は、別のところでパスの宣言を忘れてるだけでしょう。
    >ダブルクォートで囲ったら変です。
    指摘の通りstrPathは出力したいファイルのパス情報を格納しております。
    (別のルーチンでSaveFileDialogを呼び出しています。)
    説明不足で申し訳ありませんでした。

    > これ、そもそも msinfo32 は、処理結果を /report で指定された
    > ファイルに出力するのであって、標準出力に吐き出すわけではないので
    > 取れるわけないです。

    最初の説明にも記載させて頂きましたがシステム情報をファイルに
    出力するのが目的です。
    標準出力側は、いい言葉が見つからないのですが、コマンドの実行結果?を
    表示しようと考えています。
記事No.28058 のレス /過去ログ51より / 関連記事表示
削除チェック/

■28069  Re[3]: システム情報 ツールの情報をエクスポートするには?
□投稿者/ .SHO -(2008/11/19(Wed) 14:38:57)
    No28066 (まぐねしうむ さん) に返信

    > 最初の説明にも記載させて頂きましたがシステム情報をファイルに
    > 出力するのが目的です。

    つまり、平たく言えば実行してもC:\\msinfo.logが空ってことですか?

    > 標準出力側は、いい言葉が見つからないのですが、コマンドの実行結果?を
    > 表示しようと考えています。

    msinfo32は標準出力に何も出さないので何も表示されません。
記事No.28058 のレス /過去ログ51より / 関連記事表示
削除チェック/

■28072  Re[4]: システム情報 ツールの情報をエクスポートするには?
□投稿者/ まぐねしうむ -(2008/11/19(Wed) 14:47:38)
    >>最初の説明にも記載させて頂きましたがシステム情報をファイルに
    >>出力するのが目的です。
    >
    > つまり、平たく言えば実行してもC:\\msinfo.logが空ってことですか?
    C:\\msinfo.logのファイルが出来ていません。
    なので、コマンドラインが変だと思うのですが・・・・。

    >>標準出力側は、いい言葉が見つからないのですが、コマンドの実行結果?を
    >>表示しようと考えています。
    >
    > msinfo32は標準出力に何も出さないので何も表示されません。
    すみません、コレは勘違いしていました。
    確認していなかったのですが、msinfo32に対して間違ったパラメータ等を
    渡した際に、エラーが帰ってくると思っていました。

    申し訳ありません。
記事No.28058 のレス /過去ログ51より / 関連記事表示
削除チェック/

次の20件>

<< 0 | 1 | 2 >>

パスワード/

- Child Tree -