Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#在计算机进入睡眠模式前终止进程_C#_Windows 10_Background Process_Sleep Mode - Fatal编程技术网

C#在计算机进入睡眠模式前终止进程

C#在计算机进入睡眠模式前终止进程,c#,windows-10,background-process,sleep-mode,C#,Windows 10,Background Process,Sleep Mode,在Windows 10中,我创建了一个在后台运行的进程,该进程在启动时初始化。当电脑进入睡眠状态时,它会使windows崩溃,并给我一个BSOD 我对任何解决方案都持开放态度,但我当前正试图在“挂起”PowerModeChanged事件发生时终止进程。这似乎不足以在机器进入休眠状态之前终止进程,并且机器仍在崩溃。我的PowerModeChanged监听器肯定在工作,它肯定是导致机器崩溃的第二个进程 我对后台流程开发有点陌生,我整天都在尝试不同的方法,但进展甚微。肯定有人有这方面的经验,知道如何解

在Windows 10中,我创建了一个在后台运行的进程,该进程在启动时初始化。当电脑进入睡眠状态时,它会使windows崩溃,并给我一个BSOD

我对任何解决方案都持开放态度,但我当前正试图在“挂起”PowerModeChanged事件发生时终止进程。这似乎不足以在机器进入休眠状态之前终止进程,并且机器仍在崩溃。我的PowerModeChanged监听器肯定在工作,它肯定是导致机器崩溃的第二个进程

我对后台流程开发有点陌生,我整天都在尝试不同的方法,但进展甚微。肯定有人有这方面的经验,知道如何解决

// Application path and command line arguments
    static string ApplicationPath = @"C:\path\to\program.exe";
    static Process ProcessObj = new Process();

    static void Main(string[] args)
    {
        SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(SystemEvents_PowerModeChanged);

        startProcess(); 
        Console.ReadKey(); 
    }

    static void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
    {
        Console.WriteLine(e.Mode.ToString());
        if (e.Mode == PowerModes.Suspend)
        {
            ProcessObj.Kill(); 
        }

        if (e.Mode == PowerModes.Resume)
        {
            startProcess();
        }
    }

    static void startProcess()
    {

        // Create a new process object
        try
        {
            // StartInfo contains the startup information of the new process
            ProcessObj.StartInfo.FileName = ApplicationPath;

            // These two optional flags ensure that no DOS window appears
            ProcessObj.StartInfo.UseShellExecute = false;
            ProcessObj.StartInfo.CreateNoWindow = true;

            // This ensures that you get the output from the DOS application
            ProcessObj.StartInfo.RedirectStandardOutput = true;

            // Start the process
            ProcessObj.Start();

            // Wait that the process exits
            ProcessObj.WaitForExit();

            // Now read the output of the DOS application
            string Result = ProcessObj.StandardOutput.ReadToEnd();
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }

在Windows操作系统平台上,当一个人真的想为整个运行的机器运行一个“后台进程”,并让该进程在电源事件(如休眠)中生存时,他们通常将其进程设计为Windows服务

许多流行的应用程序都实现为Windows服务,如Microsoft SQL Server或Windows自己的web服务器(W3SVC)

通过选择创建类型为“Windows服务”的新项目,可以在Visual Studio中构建Windows服务

使用此技术,您将能够响应多个事件,包括以下事件(在
System.ServiceProcess.ServiceBase
中定义):

  • OnStart(字符串[]参数)
  • OnStop()
  • OnPause()
  • OnContinue()
  • OnPowerEvent(powerbroadcastatus powerStatus)
  • OnShutdown()

您可以在此处找到有关构建.NET Windows服务的更多信息:

在Windows操作系统平台上,当您确实希望在整个机器运行过程中运行“后台进程”,并且要使该进程在电源事件(如休眠)中生存时,他们通常将其进程设计为Windows服务

许多流行的应用程序都实现为Windows服务,如Microsoft SQL Server或Windows自己的web服务器(W3SVC)

通过选择创建类型为“Windows服务”的新项目,可以在Visual Studio中构建Windows服务

使用此技术,您将能够响应多个事件,包括以下事件(在
System.ServiceProcess.ServiceBase
中定义):

  • OnStart(字符串[]参数)
  • OnStop()
  • OnPause()
  • OnContinue()
  • OnPowerEvent(powerbroadcastatus powerStatus)
  • OnShutdown()

您可以在此处找到有关构建.NET Windows服务的更多信息:

尽管您说这是一个“后台进程”,但它似乎实际上是作为前台进程运行的。请解释在启动时如何启动此程序。换句话说,如何调用
Main()
方法?我认为op是指静默应用程序,而不是windows服务或较低级别的系统进程。虽然StartProcess或ProcessStart是windows服务的入口点。但使用此链接可以戳到计算机的眼睛-Doh!已经有一分钟了,OnStart()是服务派生的重载。听起来我在最初的方法中找错了方向,但是为了回答你的问题,我有两个程序,一个运行我放在/Startup/目录中的代码。另一个程序是代码示例中ApplicationPath变量示例的辅助应用程序。我正在更新此文件以使用Windows服务路径。谢谢虽然您说这是一个“后台进程”,但看起来它实际上是作为前台进程运行的。请解释在启动时如何启动此程序。换句话说,如何调用
Main()
方法?我认为op是指静默应用程序,而不是windows服务或较低级别的系统进程。虽然StartProcess或ProcessStart是windows服务的入口点。但使用此链接可以戳到计算机的眼睛-Doh!已经有一分钟了,OnStart()是服务派生的重载。听起来我在最初的方法中找错了方向,但是为了回答你的问题,我有两个程序,一个运行我放在/Startup/目录中的代码。另一个程序是代码示例中ApplicationPath变量示例的辅助应用程序。我正在更新此文件以使用Windows服务路径。谢谢