静默进程退出:进程'?' 被进程C:\ Windows \ System32 \ svchost.exe终止,终止代码为1067

没事

在Windows 10 32位安装上,C#应用程序会在随机且不频繁的时间点无提示地终止,这是一个严重的问题。例如,可能两次出现之间是一个月。有时只是一天。

基本系统规格:

Microsoft Windows 10 Enterprise 2016 LTSB
Version 10.0.14393 Build 14393
32-bit

使用https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/setting-and-clearing-flags-for-silent-process-exit,我们配置了静默进程出口监视。最后,我们有一些示例:

The process 'APPLICATIONPATH\APPLICATIONNAME.exe' was terminated by 
the process 'C:\Windows\System32\svchost.exe' with termination code 1067. 
The creation time for the exiting process was 0x01d43bd8689073eb.

查看为此设置的监视转储,我们获得了svchost的进程ID。该服务仍在系统上运行,并且显示以下服务列表:

服务

这似乎是Windows的“ netsvcs”列表。从中打开转储svchost.exe并查看此单个线程,并发现了一个有趣的调用栈:

ntdll.dll!_KiFastSystemCallRet@0 ()
ntdll.dll!_NtWaitForSingleObject@12 ()
ntdll.dll!RtlReportSilentProcessExit()
KERNELBASE.dll!TerminateProcess()
ubpm.dll!_UbpmpTerminateProcessCallback@12 ()
ubpm.dll!UbpmUtilsTimerCallback()
ntdll.dll!TppTimerpExecuteCallback()
ntdll.dll!TppWorkerThread()
kernel32.dll!@BaseThreadInitThunk@12 ()
ntdll.dll!__RtlUserThreadStart()
ntdll.dll!__RtlUserThreadStart@8 ()

UBPM是Unified Background Process Manager。但是,这如何终止我们的应用程序呢?又为什么呢?终止代码1067告诉我们什么?

以下是“静默过程监控”中的日志条目:

Log Name:      Application
Source:        Microsoft-Windows-ProcessExitMonitor
Date:          2018-08-31 15:26:09
Event ID:      3001
Task Category: None
Level:         Information
Keywords:      Classic
User:          SYSTEM
Computer:      PC
Description:
The process 'APPLICATIONPATH\APPLICATIONNAME.exe' was terminated by the process 'C:\Windows\System32\svchost.exe' with termination code 1067. The creation time for the exiting process was 0x01d43ed2aee892ab.
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-ProcessExitMonitor" Guid="{FD771D53-8492-4057-8E35-8C02813AF49B}" EventSourceName="Process Exit Monitor" />
    <EventID Qualifiers="16384">3001</EventID>
    <Version>0</Version>
    <Level>4</Level>
    <Task>0</Task>
    <Opcode>0</Opcode>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2018-08-31T13:26:09.988216500Z" />
    <EventRecordID>4853</EventRecordID>
    <Correlation />
    <Execution ProcessID="0" ThreadID="0" />
    <Channel>Application</Channel>
    <Computer>PC</Computer>
    <Security UserID="S-1-5-18" />
  </System>
  <EventData Name="EVENT_PROCESSTERMINATION_CROSSPROCESS">
    <Data Name="param1">APPLICATIONPATH\APPLICATIONNAME.exe</Data>
    <Data Name="param2">C:\Windows\System32\svchost.exe</Data>
    <Data Name="param3">1067</Data>
    <Data Name="param4">01d43ed2aee892ab</Data>
  </EventData>
</Event>

注意:在应用终止时,PC尚未关闭,事件日志中也没有其他任何指示来说明终止过程的原因。

更新1:这里有一些额外的细节(试图回答评论中的所有问题):

  • Windows启动时(有时)通过TaskScheduler启动进程。用户其他时间。不能完全确定问题仅在通过TaskScheduler启动时出现。但是有趣的一点?Windows是否可以出于某种原因杀死任务?请注意,进程退出之间的时间最多可能为一个月。
  • 我们有主程序的源代码,但是在调试器中运行它会遇到问题,因为它正在客户那里运行,但是也许。但是,我们无法运行为Debug编译的代码。完全没有,因为性能。这是现场制作。
  • 应用程序是普通的WPF应用程序,没有任何子进程或任何其他进程间通信。它确实使用了一些第三方设备,例如库和驱动程序。
  • 我们对appdomain异常和应用程序异常等进行了设置事件处理。这些都不会发生。该过程退出,没有任何异常发生的迹象。这是一个困难的过程出口。
  • 我们怀疑来源可能是第三方驱动程序,但是怎么办?以及我们如何确定情况是否如此?

更新2:我们使用nuget包TaskScheduler通过代码来设置任务。请注意,我们没有设置ExecutionTimeLimit,因此应为Nothing并因此为无穷大。

using (TaskService m_service = new TaskService())
 {
     var task = m_service.NewTask();

     task.Principal.UserId = userId;
     task.Principal.LogonType = TaskLogonType.InteractiveToken;
     task.Principal.RunLevel = TaskRunLevel.Highest;

     task.Settings.Enabled = true;
     task.Settings.MultipleInstances = TaskInstancesPolicy.IgnoreNew;
     task.Settings.Hidden = false;

     // NOTICE: A subset of the following 4 settings will cause app to hang on Win10
     //task.Settings.AllowHardTerminate = true;
     //task.Settings.DisallowStartOnRemoteAppSession = false;
     //task.Settings.RunOnlyIfLoggedOn = true;

     var trigger = (LogonTrigger)task.Triggers.Add(new LogonTrigger());
     trigger.Enabled = true;
     trigger.UserId = userId;

     task.Actions.Add(new ExecAction(executableFilePath, arguments: null,
         workingDirectory: m_installDirectoryPath));

     if (!IsAdministrator())
     {
         var message = "Cannot register task with your current identity's permissions level.";
         m_logger.Error(message);
     }
     m_service.RootFolder.RegisterTaskDefinition(taskName, task, TaskCreation.Create,
         userId, password: null, logonType: TaskLogonType.InteractiveToken);
 }

更新3:也许上面的声明是错误的,TaskScheduler库中的默认值似乎是3天或72小时。

//
// Summary:
//     Gets or sets the amount of time that is allowed to complete the task. By default,
//     a task will be stopped 72 hours after it starts to run.
//
// Remarks:
//     If a task is started on demand, the ExecutionTimeLimit setting is bypassed. Therefore,
//     a task that is started on demand will not be terminated if it exceeds the ExecutionTimeLimit.
[DefaultValue(typeof(TimeSpan), "3")]
public TimeSpan ExecutionTimeLimit { get; set; }

更新4:唯一的事情是,在进程运行了超过3天(例如30天)之后,我们观察到静默进程退出,因此不确定这到底是什么。

更新5:不能正确观察到超过3天,因此,现在一切都清楚了,这是由于任务计划程序任务的设置不正确。错误的设置如下所示:

任务计划程序错误的设置

正确的设置是:

任务计划程序正确设置

启示的

这只是一个理论,但是也许由于它是从计划任务开始的,所以任务计划程序在启动之后仍然以某种方式对流程具有“父”控制权?在我看来,Windows任务计划程序正在停止任务时,可能已经达到某些条件或出现了问题。也许您应该尝试使用start命令运行它,以便启动应用程序,但允许“计划任务”完成,因此可以从Windows Task Scheduler中释放对应用程序的控制。

EG C:\ Windows \ System32 \ cmd.exe / c开始“标题” C:\ Windows \ System32 \ notepad.exe

(或您正在运行的任何程序)

您必须运行cmd.exe,因为start命令是内置命令。另外,如果您阅读了start命令的文档,您会注意到title参数是必需的。您可以将其保留为“标题”,也可以将其设置为任何所需的名称。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

终端进程命令“ C:\ Windows \ System32 \ cmd.exe”无法启动(退出代码:2)

来自分类Dev

终止进程的Boost进程退出代码

来自分类Dev

获取终止进程的退出代码

来自分类Dev

svchost.exe进程做什么?

来自分类Dev

Svchost.exe成为资源匮乏的进程

来自分类Dev

Python使用退出代码-1073741819终止进程

来自分类Dev

终止进程对Windows焦点的影响

来自分类Dev

C ++进程以退出代码完成

来自分类Dev

从C ++启动“ C:\ Windows \ System32 \ Fodhelper.exe”

来自分类Dev

退出应用程序时如何终止python.exe * 32进程?

来自分类Dev

在其自己的进程中隔离托管服务(svchost.exe)

来自分类Dev

无法打开自身 C:\Windows\system32\file.exe 或存档 C:\Windows\system32\file.pkg

来自分类Dev

进程[#]终止,状态为[#]

来自分类Dev

从exe入口点返回不会终止Windows 10上的进程

来自分类Dev

C ++:监视Windows中的进程创建和终止

来自分类Dev

进程终止,状态为C -1073741819

来自分类Dev

进程终止,状态为C中的-1073741819

来自分类Dev

Windows中崩溃的进程的可预测退出代码

来自分类Dev

从ssh连接退出后,进程被终止/超时

来自分类Dev

从REPL退出而不会终止后台进程

来自分类Dev

Windows子系统系统进程意外终止

来自分类Dev

“ C:\\ Windows \\ System32 \\ OpenSSH \\ ssh.exe”的Createprocess()失败,错误为2

来自分类Dev

Windows窗体会在应用程序退出时终止后台进程

来自分类Dev

在C#中终止进程,因为进程已退出,所以无法处理请求

来自分类Dev

WebStorm-调试器在断点处终止进程。流程结束,退出代码为-1073741510

来自分类Dev

Windows 8.1:C:\ Windows \ SYSTEM32 \ mveftps.exe不可移动,也无法停止

来自分类Dev

为什么亚马逊拥有的IP地址将通过svchost.exe进程与我的Windows PC进行活动连接?

来自分类Dev

Windows自动启动:应用程序目录似乎为C:/ Windows / system32 /

来自分类Dev

自动进程终止进程问题

Related 相关文章

  1. 1

    终端进程命令“ C:\ Windows \ System32 \ cmd.exe”无法启动(退出代码:2)

  2. 2

    终止进程的Boost进程退出代码

  3. 3

    获取终止进程的退出代码

  4. 4

    svchost.exe进程做什么?

  5. 5

    Svchost.exe成为资源匮乏的进程

  6. 6

    Python使用退出代码-1073741819终止进程

  7. 7

    终止进程对Windows焦点的影响

  8. 8

    C ++进程以退出代码完成

  9. 9

    从C ++启动“ C:\ Windows \ System32 \ Fodhelper.exe”

  10. 10

    退出应用程序时如何终止python.exe * 32进程?

  11. 11

    在其自己的进程中隔离托管服务(svchost.exe)

  12. 12

    无法打开自身 C:\Windows\system32\file.exe 或存档 C:\Windows\system32\file.pkg

  13. 13

    进程[#]终止,状态为[#]

  14. 14

    从exe入口点返回不会终止Windows 10上的进程

  15. 15

    C ++:监视Windows中的进程创建和终止

  16. 16

    进程终止,状态为C -1073741819

  17. 17

    进程终止,状态为C中的-1073741819

  18. 18

    Windows中崩溃的进程的可预测退出代码

  19. 19

    从ssh连接退出后,进程被终止/超时

  20. 20

    从REPL退出而不会终止后台进程

  21. 21

    Windows子系统系统进程意外终止

  22. 22

    “ C:\\ Windows \\ System32 \\ OpenSSH \\ ssh.exe”的Createprocess()失败,错误为2

  23. 23

    Windows窗体会在应用程序退出时终止后台进程

  24. 24

    在C#中终止进程,因为进程已退出,所以无法处理请求

  25. 25

    WebStorm-调试器在断点处终止进程。流程结束,退出代码为-1073741510

  26. 26

    Windows 8.1:C:\ Windows \ SYSTEM32 \ mveftps.exe不可移动,也无法停止

  27. 27

    为什么亚马逊拥有的IP地址将通过svchost.exe进程与我的Windows PC进行活动连接?

  28. 28

    Windows自动启动:应用程序目录似乎为C:/ Windows / system32 /

  29. 29

    自动进程终止进程问题

热门标签

归档