![Windows 强制应用程序退出,退出状态为 1073807364 (0x40010004)](https://linux22.com/image/777459/Windows%20%E5%BC%BA%E5%88%B6%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E9%80%80%E5%87%BA%EF%BC%8C%E9%80%80%E5%87%BA%E7%8A%B6%E6%80%81%E4%B8%BA%201073807364%20(0x40010004)%20.png)
通过问答来回报。
通过 .RDP 文件从桌面启动的远程应用程序。在 RDS 框上初始化期间,应用程序启动后立即退出。使用 Process Explorer 很容易看到这种情况,并通过 Process Monitor 捕获退出代码。主要问题:我们不知道为什么会发生这种情况,也无法在 .NET 托管代码中捕获此退出/异常。
答案1
使用 Windows 的事件跟踪来发现csrss.exe
导致强制进程退出的原因。
创建/开始追踪
logman create trace "NT Kernel Logger" -ow -o c:\temp\logger.etl -p "Windows Kernel Trace" (process) -nb 16 16 -bs 1024 -mode Circular -ct perf -max 4096 -ets
停止追踪
logman stop "NT Kernel Logger" -ets
使用TraceView打开logger.etl,将内容复制到notepad++中进行查看/分析。
分析显示 csrss.exe 启动/终止 wd.exe。
csrss.exe 0x1AF0 starts
[1]2D08.4F10::04/08/22-12:13:03.4029831 [MSNT_SystemTrace] [Process - Start] UniqueProcessKey=0xFFFF81069BE15800,ProcessId=0x1AF0,ParentId=0x2D08,SessionId=136,ExitStatus=259,DirectoryTableBase=0x2DAA00000,Flags=4,UserSID=\\NT AUTHORITY\SYSTEM,ImageFileName=csrss.exe,CommandLine=%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,20480,768 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=sxssrv,4 ProfileControl=Off MaxRequestThreads=16,PackageFullName=,ApplicationId=
WD.exe 0x36AC starts
[4]3420.18C0::04/08/22-12:13:25.4538232 [MSNT_SystemTrace] [Process - Start] UniqueProcessKey=0xFFFF81069C5C5800,ProcessId=0x36AC,ParentId=0x3420,SessionId=136,ExitStatus=259,DirectoryTableBase=0x151C00000,Flags=2,UserSID=S-1-5-21-2800969729-2416879259-3544499912-1943,ImageFileName=WD.exe,CommandLine="C:\Program Files\WD.exe" 13344 6524,PackageFullName=,ApplicationId=
csrss.exe terminates WD.exe
[2]1AF0.2CEC::04/08/22-12:13:34.9258068 [MSNT_SystemTrace] [Process - Terminate] ProcessId=0x36AC
[4]36AC.1A58::04/08/22-12:13:34.9281592 [MSNT_SystemTrace] [Process - End] UniqueProcessKey=0xFFFF81069C5C5800,ProcessId=0x36AC,ParentId=0x3420,SessionId=136,ExitStatus=1073807364,DirectoryTableBase=0x151C00000,Flags=2,UserSID=S-1-5-21-2800969729-2416879259-3544499912-1943,ImageFileName=WD.exe,CommandLine="C:\Program Files\WD.exe" 13344 6524,PackageFullName=,ApplicationId=
进一步的调查发现了本地策略设置(gpedit.msc)。
终端服务 RemoteApp™ 会话终止逻辑
https://techcommunity.microsoft.com/t5/security-compliance-and-identity/terminal-services-remoteapp-8482-session-termination-logic/ba-p/246566
Administrative Templates | Windows Components | Remote Desktop Services | Remote Desktop Session Host | Session Time Limits | Set time limit for disconnected sessions = Enabled | 1 minute
此策略设置允许您配置断开连接的远程桌面服务会话的时间限制。
您可以使用此策略设置指定断开连接的会话在服务器上保持活动状态的最长时间。默认情况下,远程桌面服务允许用户断开远程桌面服务会话,而无需注销并结束会话。
当会话处于断开连接状态时,即使用户不再主动连接,正在运行的程序仍保持活动状态。默认情况下,这些断开连接的会话在服务器上会无限期地保留。
如果启用此策略设置,断开连接的会话将在指定的时间后从服务器中删除。要强制执行默认行为,即无限期地保留断开连接的会话,请选择“永不”。如果您有控制台会话,则断开连接的会话时间限制不适用。
如果禁用或未配置此策略设置,则不会在组策略级别指定此策略设置。默认情况下,远程桌面服务断开连接的会话将无限期地保持。
注意:此策略设置出现在“计算机配置”和“用户配置”中。如果同时配置了两个策略设置,则“计算机配置”策略设置优先。
定义后,也可以在注册表中找到策略设置:
HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services\MaxDisconnectionTime DWORD = 60000
从技术上讲,该应用程序在 RDS 框上启动并运行,好(可操作)和坏(终止)之间的关键因素是它在桌面上显示 UI 所花的时间。将设置更改为 5 分钟可解决问题。
微软拒绝记录这种退出状态情况,我希望这可以加速您的故障排除工作。