Windows C#控制台应用程序通过任务调度器赢得';除非用户登录,否则无法运行

Windows C#控制台应用程序通过任务调度器赢得';除非用户登录,否则无法运行,c#,windows,console-application,windows-server-2016,C#,Windows,Console Application,Windows Server 2016,该环境是Windows Server 2016标准,使用在Visual Studio 2019中开发并通过VS2019发布向导发布的C#控制台应用程序。奇怪的是,在我们的旧Windows Server 2008实例上,它似乎工作得很好,但自从我们升级到2016年以来,就没有正常工作 我开发了一个C#Console应用程序,将数据添加到我的SQL Server数据库中。它使用任务调度器直接在DB服务器上发布和运行。如果在计划任务运行时登录,则没有问题。但是,如果我没有登录,控制台应用程序就不会运行

该环境是Windows Server 2016标准,使用在Visual Studio 2019中开发并通过VS2019发布向导发布的C#控制台应用程序。奇怪的是,在我们的旧Windows Server 2008实例上,它似乎工作得很好,但自从我们升级到2016年以来,就没有正常工作

我开发了一个C#Console应用程序,将数据添加到我的SQL Server数据库中。它使用任务调度器直接在DB服务器上发布和运行。如果在计划任务运行时登录,则没有问题。但是,如果我没有登录,控制台应用程序就不会运行,我很难看到它到底能走多远

任何关于如何让未登录用户运行此功能,或如何更好地解决阻塞问题的建议都将不胜感激

目前,作为一项测试,我所要做的就是启动应用程序,写入事件查看器应用程序日志和文本文件(除非登录,否则这两种情况都不会发生)

有趣的是,当我以未登录用户身份运行时,我确实看到任务管理器中添加了ClickOnce进程,但仍然无法正常工作

以下是我迄今为止尝试过的一些方法:

  • 作为我自己的域帐户、系统和本地管理员帐户运行
  • 使用以下命令调用.bat文件以打开控制台应用程序:“START/B”Name“CMD/c”E:\setup.exe”“对.bat文件的调用有效,但控制台应用程序无法正常运行
  • 直接从任务计划程序调用setup.exe或ConsoleApplication.application
  • 将输出类型从“控制台应用程序”更改为“Windows应用程序”
以下是显示我在任务计划程序中选择的设置的屏幕截图:


解决了我的问题:我从头开始重新创建了控制台应用程序,但使用.NET Core 3.0 framework创建。在中复制我的代码并重新添加包。然后,我将这个新应用程序发布到服务器上,它按预期工作。仍然不确定这是什么原因,但这解决了我的问题

static void Main()
    {
        using (EventLog eventLog = new EventLog("Application"))
        {
            eventLog.Source = "Application";
            eventLog.WriteEntry("Log message example", EventLogEntryType.Information, 101, 1);
        }

        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

        string status = "Start: " + DateTime.Now.ToString() + "...";
        Log(status);
        status = "Complete: " + DateTime.Now.ToString() + ". Press Enter to exit.";
        Log(status);
    }

public static void Log(string message)
    {
        // Create a writer and open the file:
        StreamWriter log;

        string LogFilePath = "C:\\[folder]\\LogFile.txt";

        if (!File.Exists(LogFilePath))
        {
            log = new StreamWriter(LogFilePath);
        }
        else
        {
            log = File.AppendText(LogFilePath);
        }

        // Write to the file:
        log.WriteLine(DateTime.Now);
        log.WriteLine(message);
        log.WriteLine();

        // Close the stream:
        log.Close();
        Console.WriteLine("-Log Entry Added");
    }