我在c:\ windows \ system32 \ csexport.exe下有一个程序。如果我打开一个cmd窗口,并运行该命令,它可以正常工作并生成一个输出文件在c:\ windows \ system32 \ csexport
下但是,如果我使用File.Exists(文件),由于某些安全原因,它将始终返回false。所以,我打开一个cmd窗口,然后转到c:\ tmp文件夹,然后运行带有完整路径的csexport.exe,然后它将输出c:\ tmp中的文件。
所以我尝试在C#中这样做。这是代码
public ProcessResult RunProcess(string fileName, string arguments, string workingDirectory)
{
var processResult = new ProcessResult();
// prep process
var psi = new ProcessStartInfo(fileName, arguments)
{
UseShellExecute = true,
RedirectStandardOutput = true,
RedirectStandardError = true
, WorkingDirectory = workingDirectory
};
// start process
using (var process = new System.Diagnostics.Process())
{ // pass process data
process.StartInfo = psi;
process.Start();
processResult.Data = process.StandardOutput.ReadToEnd();
process.WaitForExit();
processResult.ExitCode = process.ExitCode;
}
return processResult;
}
但是,如何将其设置为从c:\ tmp?
运行我做了更多测试,结果很奇怪:
我设置UseShellExecute = false,然后设置workingDirectory =" C:\ tmp",文件名为完整路径。运行时,它显示此错误:
发生以下异常:System.InvalidOperationException:Process对象必须将UseShellExecute属性设置为false才能重定向IO流。 在System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo) 在System.Diagnostics.Process.Start() at ENow.Os.Utilities.ProcessWrapper.RunProcess(String fileName,String arguments,String workingDirectory) ...
但是,UseShellExecute已设置为false。