0

.NET から cmd コマンドを実行しようとしており、find cmd コマンドをパイプとして使用しています。しかし、find cmd コマンドは文字列で値を取得しますが、二重引用符を使用する代わりに文字列変数を作成すると、/"" に置き換えられます。

私の文字列変数は "/c sc QUERY ServiceName | find \"START\"" であり、"/c sc QUERY ServiceName | find "START"" を渡す代わりに、これを cmd シェルに渡します。"/c sc QUERY ServiceName | find \ "START\"" で、検索コマンドが失敗します。

以下は私の.NETコードです

        string cmdstr = "/c sc QUERY ServiceName | find \"START\"";
        Process prc = new Process();
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.FileName = "cmd.exe";
        startInfo.Arguments = cmdstr;
        startInfo.RedirectStandardOutput = true;
        startInfo.UseShellExecute = false;
        prc.StartInfo = startInfo;

        prc.Start();

        string result;
        result = prc.StandardOutput.ReadToEnd();
        prc.WaitForExit(10);

コードをデバッグすると、cmdstr 値に二重引用符が含まれていませんが、\" が含まれています。

4

2 に答える 2

2

あなたのコードについて: cmd.exeを手動で開いてsc QUERY ServiceName |
と入力するのは問題なく、同等です。ServiceNameW32Timeに 変更し、STARTRUNNINGに変更すると、(マシン上で) 空でない結果が得られます。

デバッガーについて:
デバッガーは、評価されていないバージョンの文字列 (つまり、実際にコードに入力したもの) を表示します。
評価されたエスケープ シーケンスを含む文字列を表示する場合は、"Text-Quickview" ダイアログを使用する必要があります (英語での正確なタイトルはわかりません)。
Open-Text-Quickview-Dialog-Button
テキスト-クイックビュー-ダイアログ

于 2013-08-05T12:41:45.563 に答える
0
 string cmdstr = string.Empty;
 cmdstr = "/c sc QUERY ServiceName | find \"START\"";
 cmdstr = cmdstr.Replace("\"", "");

cmdstr ="/c sc QUERY ServiceName | find START";

-それがうまくいくことを願っています。

于 2013-08-05T11:36:27.870 に答える