如何忽略程序执行时的Windows错误提示?

时间:2016-07-01 19:34:03

标签: windows batch-file cmd ignore

我有一个在Windows cmd上运行的程序,当程序抛出错误时,它会一直等待用户输入忽略/继续或取消,但是我有这个批处理文件,它会在出错时自动重启程序但是因为它一直在等待对于用户输入我必须去那里按一个按钮

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Full Screen Video Toggle</title>
<style>
.vidFrame { position: relative; top: 10%; width: 320px; height: auto; min-height: 180px; outline: 1px dashed red; }
.vidBar { position: absolute; bottom: 0; right: 0; left: 0; height: 40px; width: 99%; }

#fullScreen { position: absolute; bottom: 0; right: 0; width: 36px; height: 36px; outline: none; border: 1px solid transparent; border-radius: 6px; display: block; cursor: pointer; }

#fullScreen:hover { border: 1px groove #0ef; }
.on, .off { background: url('https://i.imgur.com/0FTwh6M.png') no-repeat; width: 36px; height: 36px; }
.off { background-position: 0 0 }
.on { background-position: -1px -50px }

#playPause { position: absolute; bottom: 0; left: 0; width: 36px; height: 36px; background: none; font-size: 36px; color: #0ff; line-height: 1; border: 1px solid transparent; display: block; cursor: pointer; outline: none; }
#playPause.play:before { content: '\25b6'; }
#playPause.pause:before { content: '\275a\275a'; }

.vid { position: absolute; top: 0; left: 0; right: 0; bottom: 0; width: 100%; height: auto; display: block; z-index: 1; outline: 1px dotted blue; }
/* 
Fullscreen Pseudo-class: 
https://developer.mozilla.org/en-US/docs/Web/CSS/:fullscreen 
*/
.vidBar:-moz-full-screen { position: fixed; }
.vidBar:-webkit-full-screen { position: fixed; }
.vidBar:-ms-fullscreen { position: fixed; }
.vidBar:fullscreen { position: fixed; }
/* 
Special Shadow DOM Settings to Override Default Controls: 
https://css-tricks.com/custom-controls-in-html5-video-full-screen/ 
*/
video::-webkit-media-controls-enclosure { display:none !important; }
.vidBar { z-index: 2147483648; }
</style>
</head>

<body>
<figure class="vidFrame">
  <video id="vid1" class="vid" src="http://techslides.com/demos/sample-videos/small.mp4"></video>
  <figcaption class="vidBar">
    <button id='playPause' class="play" title="Play/Pause Video"></button>
    <button id='fullScreen' class="on" title="Enter/Exit Full Screen"></button>
  </figcaption>
</figure>
<script>

/* 
Toggle Button with classList: 
https://developer.mozilla.org/en-US/docs/Web/API/Element/classList 
*/
var fullBtn = document.getElementById('fullScreen');
var playBtn = document.getElementById('playPause');

playBtn.addEventListener('click', function(event) {
  var player = document.getElementById('vid1');

  if(player.paused) {
    playBtn.classList.remove('play');
    playBtn.classList.add('pause');
    player.play();
  } else {
    playBtn.classList.add('play');
    playBtn.classList.remove('pause');
    player.pause();
  }
}, false);

fullBtn.addEventListener('click', function(event) {
  var tgtEle = document.querySelector('.vidFrame');
  var  onOrOff = fullBtn.classList.contains('on');

  if (onOrOff) {
    enterFS(tgtEle);
    fullBtn.classList.remove('on');
    fullBtn.classList.add('off');
  } else {
    exitFS();
    fullBtn.classList.add('on');
    fullBtn.classList.remove('off');
  }
}, false);

/*
Fullscreen API:
https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API
*/
function enterFS(element) {
  if (element.requestFullscreen) {
    element.requestFullscreen();
  } else if (element.msRequestFullscreen) {
    element.msRequestFullscreen();
  } else if (element.mozRequestFullScreen) {
    element.mozRequestFullScreen();
  } else if (element.webkitRequestFullscreen) {
    element.webkitRequestFullscreen();
  }
}

function exitFS() {
  if (document.exitFullscreen) {
    document.exitFullscreen();
  } else if (document.msExitFullscreen) {
    document.msExitFullscreen();
  } else if (document.mozCancelFullScreen) {
    document.mozCancelFullScreen();
  } else if (document.webkitExitFullscreen) {
    document.webkitExitFullscreen();
  }
}
</script>
</body>
</html>

如何让它忽略错误并自动继续?

以下是提示的图片:

image

2 个答案:

答案 0 :(得分:1)

masterserver.exe中发生断言失败时,会显示该弹出消息。失败表示代码错误,因为它在编译时测试一个在运行时始终为true的条件,但条件实际上是假的。

在这种情况下,错误发生在第528行CCRakNetUDT::OnAck()的{​​{1}}中。该行正在调用ccraknetudt.cpp,其中RakAssert(rtt < 10000000);是{{1}的输入参数}}。断言是rtt的值应始终小于OnAck(),但实际上并非如此。

rtt

为Xbox以外的平台编译10000000的调试版本时,void CCRakNetUDT::OnAck(CCTimeType curTime, CCTimeType rtt, bool hasBAndAS, BytesPerMicrosecond _B, BytesPerMicrosecond _AS, double totalUserDataBytesAcked, bool isContinuousSend, DatagramSequenceNumberType sequenceNumber ) { #if CC_TIME_TYPE_BYTES==4 RakAssert(rtt < 10000); #else RakAssert(rtt < 10000000); // <-- line 528 #endif 会映射到assert(),否则它是无操作:

RakAssert.h

masterserver.exe

RakNetDefines.h

RakAssert()

根据assert() documentation

  

评估表达式,当结果为false时,打印诊断消息并中止程序

     

...

     

断言宏通常用于在程序开发期间识别逻辑错误。使用它可以在意外情况发生时停止程序执行,只有在程序运行不正确时才将expression参数计算为false。 通过定义宏#include <assert.h> #include "RakNetDefines.h" ,可以在编译时关闭断言检查。您可以使用#ifndef RakAssert #if defined(_XBOX) || defined(X360) #else #if defined(_DEBUG) #define RakAssert(x) assert(x); #else #define RakAssert(x) #endif #endif #endif 命令行选项关闭断言宏而无需修改源文件。您可以在包含NDEBUG之前使用/DNDEBUG指令关闭源代码中的断言宏

     

当expression的计算结果为false(0)并调用#define NDEBUG以终止程序执行时,assert宏会输出诊断消息。如果表达式为真(非零),则不执行任何操作。诊断消息包括失败的表达式,源文件的名称以及断言失败的行号。

     

...

     

诊断消息的目标取决于调用例程的应用程序类型。控制台应用程序始终通过<assert.h>接收消息。 在基于Windows的应用程序中,abort调用Windows stderr函数创建一个消息框,以显示消息和assert按钮。当用户点击MessageBox时,该程序会立即中止

     

当应用程序与运行时库的调试版本链接时,OK会创建一个包含三个按钮的消息框:OKassert和{{ 1}} 即可。如果用户单击Abort,程序将立即中止。如果用户单击Retry,则调用调试器,如果启用了实时(JIT)调试,则用户可以调试程序。如果用户点击Ignore,则Abort继续正常执行:使用Retry按钮创建消息框。请注意,当存在错误条件时单击Ignore可能会导致未定义的行为。

     

...

     

如果未定义assert,则在C运行时库的发行版和调试版中都会启用OK宏。 定义Ignore时,宏可用但不评估其参数且无效。启用后,assert宏会调用NDEBUG来实现它。其他断言宏NDEBUGassert_wassert也可用,但它们仅评估在定义_ASSERT宏时何时传递给它们的表达式在与C运行时库的调试版本链接的代码中。

因此,如果要禁用此特定弹出错误,则需要:

  1. 找到错误的根本原因并修复它(或联系Unity作者修复它),因为这是一个代码错误。

  2. 编译_ASSERTE以进行发布而不是调试,因此_ASSERT_EXPR是无操作。

  3. 在源代码中,在项目解决方案中,或通过命令行上的编译器_DEBUG开关定义masterserver.exe,因此RakAssert()是无操作。

  4. 要知道,如果错误再次发生,禁用断言会使应用程序崩溃或行为不正确。

答案 1 :(得分:0)

如果有人遇到此问题,请进行更新: 我在发布模式下编译它就像Remy说的那样,问题完全消失了,应用程序现在正常运行而没有任何错误。