系统。诊断。过程问题与工作目录
-
20-09-2019 - |
题
我使用一个第三方软件工具(指令行工具)合并的PDF文件。使用C#我试图使用 System.Diagnostics.Process
运行可执行的,但我带来了一些错误取决于参数的设置。
- 如果
UseShellExecute = true
和RedirectStandardOutput = true
我得到:- 该进程的对象必须拥有的
UseShellExecute
财产设定为false
为了重新定向IO流。
- 该进程的对象必须拥有的
- 如果
UseShellExecute = true
和RedirectStandardOutput = false
我得到:- 本系统找不到指定的文件
- 如果
useShellExecute = false
和RedirectStandardOutput = true
我得到:- 本系统找不到指定的文件
- 如果
UseShellExecute = false
和RedirectStandardOutput = 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();
有人可以帮我解决这个问题,好吗?
解决方案
辩论不应该被通过 文件名 财产。你应该使用 参数 属于这样的:
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");
}
其他提示
时 UseShellExecute
是 false
的 WorkingDirectory
财产改变其含义!
它成为工作目录的新的过程 不 路径可执行的。你需要以全路径指定的可执行在 FileName
财产代替。
我不是专家使用的过程API但它看起来像您下命令行参数的文件。尝试使用的论据为该命令行参数。并把完整的路径exe在文件名称。
还使用一个@前的串摆脱需要增加一倍的反斜杠。
p.StartInfo.FileName = @"C:\Program Files (x86)\VeryPDF PDF Split-Merge\pdfpg.exe"
不隶属于 StackOverflow