2

これのどこが間違っているのですか?引数が実行されていないようで、コマンドプロンプトを開くだけです。「結果」(StandardOutput)は、新しいコマンドプロンプトを開いたときに表示されるものとまったく同じです....Microsoft Windows [Version 6.1.7600] Copyright...と言うと、コマンドプロンプトが開始されるパスです。

とにかく、ここに私が持っているコードがあります:

    private static void ExecuteProcess(string processFile, string processArguments)
    {
        ProcessStartInfo psi = new ProcessStartInfo(processFile, processArguments);
        psi.RedirectStandardOutput = true;
        psi.RedirectStandardError = true;
        psi.UseShellExecute = false;
        //psi.CreateNoWindow = true;

        Process p = new Process();
        p.StartInfo = psi;

        try
        {
            Cursor.Current = Cursors.WaitCursor;

            p.Start();

            string output = p.StandardOutput.ReadToEnd();

            p.WaitForExit();

            Cursor.Current = Cursors.Default;

            if (p.ExitCode == 0)
                MessageBox.Show(output, "Results");
            else
                throw new Exception(p.StandardError.ReadToEnd());
        }
        catch (Exception ex)
        {
            Cursor.Current = Cursors.Default;
            MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        finally
        {
            p.Dispose();
        }
    }

processFile は "cmd.exe" と同じです。 processArguments は次のようになります。

csvde -s {servername} -f {filename} -d OU=MyOU,DC=dmz,DC=lan -r "(objectClass=organizationalUnit)" -n

「引数」が実行されない理由についての助けは素晴らしいでしょう!

編集:

私がこれまでに発見したことの1つは、パーミッションに関するChrisの提案は真実であり、設定する必要がありました:

psi.Verb = "runas";

しかし、プロセスを実行すると、プロセスに関連付けられたユーザー名がないように見えたので、次の行も追加しました。

psi.UserName = Environment.UserName;

今、私は「スタブが悪いデータを受け取りました」を取得しています...

4

2 に答える 2

3

ドキュメントから:

コマンド

コマンド インタープリター Cmd.exe の新しいインスタンスを開始します。cmd をパラメータなしで使用すると、Windows XP のバージョンと著作権情報が表示されます。

構文 cmd [[{/c|/k}] [/s] [/q] [/d] [{/a|/u}] [/t:fg] [/e:{on|off}] [ /f:{on|off}] [/v:{on|off}] 文字列] ページの先頭へ

パラメーター

/c : 文字列で指定されたコマンドを実行して停止します。

したがって、次のことが必要です。

  1. EXE へのフル パスを渡すか、
  2. 作業ディレクトリをexeを含むディレクトリに設定します

それから

  1. processFile== "[]csvde.exe" を作成し、から削除するかprocessArguments
  2. "/c \"" を先頭に追加し、"\"" を に追加しますprocessArguments
于 2012-06-29T20:10:34.097 に答える
0

私はついにこれに取り組み、これを機能させる方法を見つけました。

プロセスを実行するには、Process.ProcessStartInfo のユーザー名、パスワード、およびドメインを具体的に設定する必要がありました。

于 2012-11-19T15:15:00.513 に答える