3

サードパーティのソフトウェアツール(コマンドラインツール)を使用してPDFファイルをマージしています。C#を使用System.Diagnostics.Processして実行可能ファイルを実行しようとしていますが、パラメーターの設定に応じていくつかのエラーが発生します。

  • もし私UseShellExecute = trueRedirectStandardOutput = true得るなら:
    • IOストリームをリダイレクトするには、ProcessオブジェクトのUseShellExecuteプロパティをに設定する必要があります。false
  • もし私UseShellExecute = trueRedirectStandardOutput = false得るなら:
    • システムは、指定されたファイルを見つけることができません
  • もし私useShellExecute = falseRedirectStandardOutput = true得るなら:
    • システムは、指定されたファイルを見つけることができません
  • もし私UseShellExecute = falseRedirectStandardOutput = false得るなら:
    • システムは、指定されたファイルを見つけることができません

実行中のコードは次のとおりです。

Process p = new Process();

p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = false;
p.StartInfo.WorkingDirectory = "C:\\Program Files (x86)\\VeryPDF PDF Split-Merge v3.0";
p.StartInfo.FileName = "pdfpg.exe " + strFileNames.Trim() + " " 
                       + D2P_Folder_Converted + "\\" + strOutputFileName;
p.Start();
p.WaitForExit();
p.Close();
p.Dispose();

誰かが私がこの問題を回避するのを手伝ってもらえますか?

4

3 に答える 3

8

プロパティの意味が変わるのUseShellExecuteはいつですか。falseWorkingDirectory

これは、実行可能ファイルへのパスではなく、新しいプロセスの作業ディレクトリになります。FileName代わりに、プロパティで実行可能ファイルへのフルパスを指定する必要があります。

于 2010-02-11T19:05:25.280 に答える
3

FileNameプロパティに引数を渡さないでください。これには、 Argumentsプロパティを使用する必要があります。

p.StartInfo.Arguments = string.Format(
    "{0} {1}", 
    strFileNames.Trim(), 
    Path.Combine(D2P_Folder_Converted, strOutputFileName)
);
p.StartInfo.WorkingDirectory = Path.Combine(GetProgramFilesX86(), "VeryPDF PDF Split-Merge v3.0");
p.StartInfo.FileName = "pdfpg.exe";

関数は次のGetProgramFilesX86ように定義できます。

static string GetProgramFilesX86()
{
    var processorArchitecture = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432");
    if(IntPtr.Size == sizeof(long) || !string.IsNullOrEmpty(processorArchitecture))
    {
        return Environment.GetEnvironmentVariable("ProgramFiles(x86)");
    }
    return Environment.GetEnvironmentVariable("ProgramFiles");
}
于 2010-02-11T19:07:24.373 に答える
0

私はプロセスAPIの使用に精通していませんが、コマンドライン引数をFileNameに配置しているようです。コマンドライン引数に引数を使用してみてください。そして、exeへのフルパスをFileNameに入れます。

また、文字列の前に@を使用すると、円記号を2倍にする必要がなくなります。

p.StartInfo.FileName = @"C:\Program Files (x86)\VeryPDF PDF Split-Merge\pdfpg.exe" 
于 2010-02-11T19:06:32.310 に答える