【问题标题】:HTTP request in SessionEnded event not firingSessionEnded 事件中的 HTTP 请求未触发
【发布时间】:2020-08-02 00:03:14
【问题描述】:

我想在系统关闭、注销或重新启动时发出 HTTP 请求。为此,我为SystemEvents.SessionEnded 事件实现了一个处理程序:

// 主要

Microsoft.Win32.SystemEvents.SessionEnded += new SessionEndedEventHandler(Shutdown.ProcessExit);

// 关机类

public static void ProcessExit(object sender, EventArgs e){
  File.WriteAllText("path","ProcessExit fired")
  string jsonString = "{}";
  string url= "localurl";
  using (var client = new HttpClient()){
    StringContent stringContent = new StringContent(jsonString, Encoding.UTF8, "application/json");
    var result = await client.PostAsync(url, stringContent);
  }
}

令我惊讶的是,http 请求从未像服务器访问日志中那样触发。在计算机关闭时发出 HTTP 请求的正确方法是什么?我可以确认事件确实被触发了,因为在 ProcessExit 上写入是成功的,所以问题与发出 http 请求有关。

【问题讨论】:

    标签: c#


    【解决方案1】:

    我一次又一次测试并且完美运行的最佳解决方案是在事件 ID 1074 上创建计划任务并启动自定义应用程序:

    在事件类型基本上添加新触发器:

    日志:系统

    来源:User32

    事件ID:1074

    然后将您的应用程序付诸行动。

    【讨论】:

    • 感谢 XAMT 的支持。我已经测试过这种方法,但不幸的是,在重新启动或注销时没有触发该事件。也就是说,操作中的应用程序永远不会运行。如果我在任务计划程序中手动运行它,它会发送 http 请求。
    • @RobertSegdewick; Windows Logoff 事件 ID 为:4647 和 6006 用于 Restart。所以在触发器选项卡中添加这些事件。此外,如果您的应用程序需要Administrator Privileges,请在第一个选项卡中查看。
    • 已经过关机测试。事件未触发。
    • @RobertSegdewick;选择“运行用户是否登录”并选中以最高权限运行。另外,选择 with OS。
    猜你喜欢
    • 1970-01-01
    • 2017-09-18
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多