Windows C# Консольное приложение через планировщик задач не будет работать, пока пользователь не вошел в систему - PullRequest
0 голосов
/ 21 января 2020

Среда Windows Server 2016 Standard, использующая консольное приложение C#, разработанное в Visual Studio 2019 и опубликованное с помощью мастера VS2019 Publi sh. Странно то, что на старом экземпляре Windows Server 2008 это работало нормально, но не работало должным образом с момента обновления до 2016 года.

Я разработал консольное приложение C# для добавления данных к моей SQL базе данных сервера. Он публикуется и запускается непосредственно на сервере БД с помощью планировщика заданий. Если я вошел в систему при выполнении запланированной задачи, никаких проблем. Но если я не вошел в систему, консольное приложение не запустилось, и у меня возникли проблемы с просмотром, насколько далеко оно зашло.

Любые советы о том, как заставить его работать с незарегистрированным пользователем, или как лучше устранить неполадки с задержками.

В настоящее время в качестве теста все, что я пытаюсь сделать, это запустить приложение, записать в журнал приложения просмотра событий и в текстовый файл. (ничего не произойдет, если вы не авторизованы).

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");
    }

Интересно, что я вижу процесс ClickOnce, добавленный в диспетчер задач, когда я работаю как пользователь, не вошедший в систему, но по-прежнему не работает должным образом.

enter image description here

Вот некоторые из вещей, которые я пробовал до сих пор:

  • Запуск от имени моей учетной записи домена, системы и учетной записи локального администратора
  • Вызовите файл .bat с помощью следующей команды, чтобы открыть консольное приложение: «START / B» Имя »CMD / c« E: \ setup.exe »« Вызов файла .bat работает, но Консольное приложение не работает должным образом
  • Вызовите setup.exe или ConsoleApplication.application напрямую из планировщика задач
  • Изменение типа вывода с «Консольное приложение» на «Windows Приложение»

Ниже приведены снимки экрана, показывающие мои выбранные настройки в планировщике задач: enter image description here

enter image description here

1 Ответ

0 голосов
/ 22 января 2020

Что-то, что решило мою проблему: я заново создал консольное приложение, но создал с использованием. NET Core 3.0 framework. Скопировал мой код и заново добавил пакеты. Затем я опубликовал это новое приложение на сервере, и оно заработало, как и ожидалось. Все еще не уверен, к чему это относится, но это исправило мою проблему

...