■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); } もう少しつっこむところはあるかとは思いますが、とりあえずこんな感じです。
■No28079 (ぽぴ王子 さん) に返信 そのままCopyしましたが psi.Arguments = "/c \"" + commonProgramFiles + @"\Microsoft Shared\MSInfo\msinfo32.exe\" /report \"" + strPath + "\" /categories +all"; ~~~~ 「文字 '\' は予期されていません。」が表示されます。 もしかして、No28058 でも指摘されていましたが SP1とSPなしでは動きが違うのでしょうか? それとも、こちらの実行環境が壊れているのでしょうか? これをコンパイルが通るように psi.Arguments = "/c \"" + commonProgramFiles + @"\Microsoft Shared\MSInfo\msinfo32.exe" + '"' + " /report " + '"' + strPath + "\" /categories +all"; に書き換えましたが、依然ファイルが作成されません。 psi.Argumentsの中身は "/c \"C:\\Program Files\\Common Files\\Microsoft Shared\\MSInfo\\msinfo32.exe\" /report \"C:\\msinfo.log\" /categories +all" になります。 これをコマンドプロンプト上に貼り付けて実行した所 ファイルが作成されますので、コマンドライン自体は問題ないと思います。 あと、細かい事ですが string result = File.ReadAllText(strPath); //出力された結果を表示 Console.WriteLine(results); ~~~~~~~ result ですよね すみません、何がいけないのでしょうか?
お世話になります。No28058 で質問させていただいた件で教えてください。http://bbs.wankuma.com/index.cgi?mode=al2&namber=28058&KLOG=51前回の質問の際に教えていただいた方法でXPでの情報収集は行えるようになったのですが、VistaUltimate Sp1で試してみた所、msinfo32の画面自体が上がってきてしまい期待通りの動作をしません。期待している動きは、裏側でシステム情報をTXTファイルに出力する事なのですがVistaではMsinfoが普通に起動してしまいます。msinfo32.exe自体の場所はレジストリのLocalMachine\Software\\Microsoft\\Shared Tools\\MSInfo\\Software\\Microsoft\\Shared Tools\\Location\\MSInfoから取得してきておりまた実際にEXEが起動するのでパス自体は通っておりVistaのセキュリティ側で弾いているか何かをしている気がします。確認の為DOS画面からmsinfo32.exe /report c:\test.txt /categories +allと入力する事で期待通りの動きをします。どなたか原因や解決方法をご存知ではないでしょうか?
.netの仕様で危険なコードをリクエストでいれることが出来内容になっていると思いますがそのことについて教えて下さい。http://mindia.jp/book/error/entry/1673このページを参考にしましたが・・・テキストボックスをWEBアプリ上に配置してありそれを元にXMLやHTMLを生成しています。現状ではエラーが起きてしまうのですがタグなどを許可したいとは思っています。しかし、全許可は危ないですよね???たとえば<script></script>タグなんて・・・しかし、他にセキュリティ上問題となるようなタグが思いつきません。あと気になるのは変なタグを入れられると書体が丸崩れになるところでしょうか・・・いい対策があれば教えて下さい。
■No52085 (裕猫 さん) に返信> con.ConnectionString = MKST.UID;MKST.UIDの内容がわからないと接続文字列がわかりません。ところで会社で開発しているプログラムコードって自宅に持ち出し禁止だったりする場合も多いと思うのですが大丈夫?
- Child Tree -