我正在尝试获取进程的输出。我通过使用.bat实现了这一点,它包含以下文本:
program.exe > output.txt < input.txt
其中program.exe是我的可执行文件,output.txt是我要输出数据的文件,而input.txt只是一个空文件,因为程序不时需要键输入。我自己运行它时,.bat文件运行得很好,但是当我尝试使用C#代码运行它时,它只是没有正确完成。 我试图使用以下代码运行它:
Process.Start(path);
我尝试了很多不同的东西,但这是我上次尝试过的代码,但我的尝试都没有。此外,当您以管理员身份运行它时,.bat文件无法正常运行,而我正在使用的C#程序需要管理员权限。这可能是问题,而不是实际运行过程吗?
答案 0 :(得分:1)
您需要运行流程cmd.exe /c [path]
(也就是流程是&#34; cmd.exe&#34;,您的参数是$"/c {path}"
。
当您在命令提示符下执行&#34;程序执行&#34;和&#34; .bat / .cmd交互式脚本&#34;。由于您要执行批处理文件,因此需要告诉CreateProcess cmd.exe实际上正在运行它。
答案 1 :(得分:0)
这个问题正是我的想法。从提升的应用程序启动时,.bat文件无法正常工作。为了解决这个问题,我使用了这个:
Process.Start("explorer.exe", path);
工作完美。很快就解决了这个问题,但是如果有人发现自己被同样的事情困住了,我想把它留在这里。
答案 2 :(得分:0)
在 ProcessStartInfo
中,您应该将 UseShellExecute
设置为 false
,然后在您发现蝙蝠正常工作的路径中设置 WorkingDirectory
。
下面是一个让你更好理解的例子:
using (Process MyProcess = new Process())
{
var MyProcessInfo = new ProcessStartInfo()
{
UseShellExecute = false,
WorkingDirectory = "path",
FileName = "file.exe",
Arguments = "args"
};
MyProcess.StartInfo = MyProcessInfo;
MyProcess.Start();
}