PowerShell - 识别何时发生 C++ 运行时错误

PowerShell - 识别何时发生 C++ 运行时错误

我正在寻找一些指导来识别 C++ 运行时错误发生的时间,以便我可以自动恢复。

我的服务器上不断出现以下 C++ 运行时错误,这导致我的生产应用程序停止“工作”: C++ 运行时错误屏幕截图

虽然屏幕上出现了运行时错误消息,但从 Windows 的角度来看,我的应用程序正在“响应”(使用下面的 PowerShell 脚本),但应用程序实际上并没有“工作”。

((Get-Process -Name ReqMgr).Responding)

如果我

Get-Process

在 PowerShell 中,当运行时错误出现在屏幕上时,它并没有出现(对我而言)运行时错误作为它自己的应用程序/任务运行,我可以在 PowerShell 中对其进行测试(除非我遗漏了什么)。

我可以在任务管理器 > 应用程序选项卡中看到列出的“Microsoft Visual C++ 运行时库”,但是右键单击并转到进程会将我带到我的应用程序的进程,而不是运行时错误进程: 任务管理器 > 应用程序选项卡

直到我单击运行时错误对话框中的“确定”按钮,我才在事件日志中发现任何明显的信息,这显然不利于自动恢复。

Get-Process 的结果:

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
     33       5     1816        676       3.95   1328   0 conhost
     32       5     1364        332       0.23   1356   0 conhost
     90       9     6160        804       0.06   1348   0 coreFrameworkHost
   3590      61   386300      16688  19,851.21   1260   0 coreServiceShell
    871      13     2740       2204      56.74    572   0 csrss
     72       8     8192        180       0.55    644   1 csrss
    396      12     2800       4068      26.10   3368   2 csrss
    196      15     4548      12472       0.12   5168   0 dllhost
     31       3     1264        208       0.03   1436   0 ds_monitor
    440      34   148236     110848   3,718.47   2332   0 dsa
     87       7     2376       3476       0.76   2284   2 dwm
    854      53    56444      50532     123.35   3576   2 explorer
      0       0        0         24                 0   0 Idle
    168      24     9032        772       0.14   1004   1 LogonUI
   2384      29    26688      25020   1,394.95    740   0 lsass
   2725      12    16984      12796     572.24    752   0 lsm
    390      38    75452      19412       4.23   9648   2 mmc
    102      10     7704      10624       0.80   3924   0 mscorsvw
    117      12     5032       9224       2.67  13304   0 mscorsvw
    162      18     4252       2528       0.11   3092   0 msdtc
     83       9    13972       5652      59.70   1232   2 Notifier
     84       8     1900       2340       9.24   2476   0 Notifier
    390      52    31760      42136       2.82  10136   2 perfmon
    630      53   124556     101032      21.98   5364   2 powershell_ise
    194      11     3268       4964       6.82   4048   2 rdpclip
    801     302   849064     950080   9,286.37  13416   2 ReqMgr
    278      14     7292       7320      36.35    732   0 services
     37       3      808        664       2.95    476   0 smss
    206      19    19912       1184       0.97   1484   0 SMSvcHost
    186      16     5936       3372     845.09   1928   0 snmp
    148      21     3388        924      21.59   1664   0 sntlkeyssrvr
    385      12     2488       1128     107.95   1820   0 sntlsrtsrvr
    144      20     3572       1884       2.70   1780   0 spnsrvnt
   4365     113    42656      44056     962.76    492   0 svchost
    570      41    24276      21796      70.12    532   0 svchost
    283      21     7492       9192      17.35    536   0 svchost
   1523      20    11352      10916      28.28    568   0 svchost
    387      14     6404       6328   1,313.98    844   0 svchost
    313      16    11084      10860     102.63    928   0 svchost
    685     100    45972      32480     253.60   1020   0 svchost
    311      33     7556       4732       6.46   1120   0 svchost
    124      13     7180       5812       1.19   1388   0 svchost
    157      12     4836       2276       1.20   1412   0 svchost
     53       4     1304        128       0.00   1636   0 svchost
    268      27    13256       6920       3.29   1960   0 svchost
    140      13     6364       1256       0.08   2192   0 svchost
    438      17     6676       8684     717.18   2804   0 svchost
    117      13     2220        156       0.03   2844   0 svchost
    904       0      132       1080   2,066.64      4   0 System
     92       8     2460       2676       0.84   2724   2 taskeng
     95       8     2936       2528       1.87   2984   0 taskeng
    209      21     9568       6956       3.88   3988   2 taskhost
    199      16     7144      14840     891.78  11976   2 taskmgr
    351      23     8824       8200     607.48   2008   0 vmtoolsd
    187      17     7444       3804     956.44   3448   2 vmtoolsd
     91      10     1868        232       0.02    624   0 wininit
     80       6     2064        216       0.08    676   1 winlogon
    187       8     2392       2400       0.34   4084   2 winlogon
    287      17    31496      15608     558.06   3908   0 WmiPrvSE
    306      16     6304      13772       0.31  10224   0 WmiPrvSE
    221      12    14736      20276       0.16  10796   0 WmiPrvSE
    190      14    15504       2048      14.26   2224   0 zabbix_agentd

注意:我没有编写崩溃的应用程序。我必须在我们的生产服务器上运行它。该应用程序已“报废”,我无法获得任何支持来修复运行时错误的根本原因。

运行时错误在多年后才开始出现。我已经卸载了最近的 Windows 更新,以防上个月的 .NET 更新是根本原因,但问题仍然存在。

我有两台服务器在负载平衡配置中运行同一个应用程序。当我在一台服务器上收到运行时错误时,几分钟后,第二台服务器上也收到相同的运行时错误。

答案1

谢谢大家的帮助。

我实际上找到了一种在 PowerShell 中检测运行时错误并终止/重新启动应用程序的方法,如下所示:

$Title = Get-Process | Where-Object {$_.mainwindowhandle -ne 0} | Select-Object MainWindowTitle
if ($Title -like '*Visual C++*') {
        $ReqMgr = Get-Process ReqMgr -ErrorAction SilentlyContinue
        $ReqMgr | Stop-Process -Force
        Start-Sleep -Seconds 10
        Start-Process -FilePath "C:\Program Files (x86)\ReqMgr\Bin\ReqMgr.exe"
        Start-Sleep -Seconds 10
        }

相关内容