如何使用ProcessStartInfo从其他文件夹运行exe?

时间:2017-02-10 19:52:23

标签: c#

我在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。

0 个答案:

没有答案