我尝试使用System.Diagnostics.Process从C#应用程序启动名为snort的应用程序,我需要捕获其输出。为此,我使用了以下代码。
当我尝试运行它时,我收到一个与加载配置文件有关的错误。如果我尝试从没有管理员权限的CMD手动运行exe,我会得到同样的错误,所以我认为这是分叉进程的权限问题,但我并不完全确定。但是,我尝试了以下内容,但无济于事:
然而,错误仍然存在。另外,为了清楚起见:进程已启动,我在My OutputHandler方法中接收输出等 - 问题在于forked exe,它在读取指定的配置文件时出现问题。
示例代码如下:
var process = new Process();
process.StartInfo.FileName = @"C:\Snort\bin\snort.exe";
process.StartInfo.Arguments = @"-A console -i2 -c C:\Snort\etc\snort.conf -l C:\Snort\log\ -K ascii";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
process.ErrorDataReceived += new DataReceivedEventHandler(OutputHandler);
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
这确实启动了所需的进程,但是当我提到该进程(snort)时,在尝试读取配置文件时输出错误(如果我尝试从没有管理员的CMD手动运行相同的进程,我会得到同样的错误权利 - 因此我认为问题可能是基于权限的原因。)
任何人都可以建议我尝试解决这个问题。我做需要捕获输出,所以(如果我理解正确的话)' runas'动词没有帮助。
感谢您的时间。
答案 0 :(得分:0)
我探索了一些选项并尝试继续执行权限并更改了应用程序清单文件权限,并将标准权限文件替换为:
requestedExecutionLevel level =“requireAdministrator”uiAccess =“false”
这没有改变任何事情。 我正在使用Windows 8.1,当我访问snort.exe文件的属性时,我更改了兼容性并运行与win 7兼容的应用程序并勾选该框以管理员身份运行,现在工作正常。
非常感谢大家