小编Nek*_*ome的帖子

我可以在C#进程中使用SetErrorMode吗?

我正在准备编写一个在线评判核心,
一个可以编译用户代码并运行程序来检查答案的程序,如uva在线评判.

而我在捕获如下提交程序的例外方面遇到了问题.

int main()
{
    while(~scanf("%d %d",n,&m))
    {   
        printf("%d\n",n+m);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它在第一行被拒绝访问,因为它将整数扫描到错误位置.
如何捕获进程的运行时错误?

我曾经使用"try catch"来捕获异常,
但它没有回复有关运行时错误的任何内容.

所以我只检查提交程序的退出代码,虽然它不是一个好的方法来检查除了一个进程..
它显示像照片

我必须手动关闭错误消息框,
并找到一个解决方案,即使用SEH Handler DLL进行处理.

SetErrorMode(SEM_NOGPFAULTERRORBOX);
Run Code Online (Sandbox Code Playgroud)

但我不知道如何在C#进程中使用它.

以下是我的判断代码

timer = new Stopwatch();
timer.Reset();

submitProg = new Process();
submitProg.StartInfo.FileName = outputFile;
submitProg.StartInfo.UseShellExecute = false;
submitProg.StartInfo.CreateNoWindow = true;
submitProg.StartInfo.RedirectStandardInput = true;
submitProg.StartInfo.RedirectStandardOutput = true;
submitProg.StartInfo.RedirectStandardError = true;
submitProg.StartInfo.ErrorDialog = false;
submitProg.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
submitProg.EnableRaisingEvents = true;

submitProg.Start();
timer.Start();

progInput = submitProg.StandardInput;
progOutput = submitProg.StandardOutput;

progInput.Write(inputStream.ReadToEnd());
submitProg.StandardInput.Close();
while (!submitProg.HasExited)
{
    peakPagedMem = …
Run Code Online (Sandbox Code Playgroud)

c# winapi

6
推荐指数
2
解决办法
4338
查看次数

标签 统计

c# ×1

winapi ×1