33

У меня есть демон-процесс, который я запускаю на своей машине каждый час, и хотя я установил флажок Hidden , он не работает. Свойства задачи

Каждый час задача выполняется, но она показывает черное командное окно, в котором запущено мое консольное приложение .NET. Это остается видимым, пока задача не завершится, а затем исчезнет. Это очень раздражает, потому что оно всплывает и прерывает все, что я делаю:

Я действительно хочу это скрыть, так как я могу это исправить?

8 ответов8

39

Установите флажок «Запускать, вошел ли пользователь в систему или нет», и исполняемый файл будет работать в фоновом режиме.

18

Хорошо, после еще одного исследования я нашел этот ответ на StackOverflow:

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

В комментарии отмечается, что это дает полные права на задачу, что может раздражать, но в этом случае допустимо.

Но все же, что делает Hidden , если не делает этого? И почему учетная запись пользователя, на котором запущена программа, имеет какое-либо отношение к тому, видна ли она?

18

Почему запланированное задание Windows 7 скрыто? Должен объяснить, почему это происходит.

Кроме того, в этом описании TechNet общих свойств задачи указано:

Общие свойства задачи отображаются на вкладке «Общие» диалогового окна «Свойства задачи» или «Создать задачу». Общие свойства задачи включают имя задачи, ее автора, описание, параметры безопасности, операционную систему, для которой настроена задача, и свойство, которое определяет, является ли задача скрытой.

Когда вы создаете задачу в папке задач, вы должны назвать задачу. Никакие две задачи не могут иметь одинаковое имя, если они находятся в одной папке задач. Описание задачи не является обязательным.

Параметры безопасности задачи определяют контекст безопасности, в котором выполняется задача. Для получения дополнительной информации см. Контекст безопасности задачи.

По умолчанию скрытые задачи не отображаются в пользовательском интерфейсе планировщика задач. Вы можете просматривать скрытые задачи, когда в меню «Вид» выбран параметр «Показать скрытые задачи». Вы делаете задачу скрытой, когда устанавливаете флажок Скрытый на вкладке Общие диалогового окна Свойства задачи или Создать задачу.

Не означает ли это, что флажок скрывает только задачу из пользовательского интерфейса планировщика, а не саму программу, которая запланирована?

9

СОВЕРШЕННОЕ РЕШЕНИЕ

  • Изменение пользователя, выполняющего задачу, на SYSTEM - выполнит вашу команду не под вашим пользователем
  • Проверка «Выполнить независимо от того, вошел ли пользователь в систему или нет» - требует сохранения пароля вместе с задачей и скрытно прервет изменение пароля в следующий раз (что обычно применяется в политиках домена в корпоративных средах).

Если это для вас прерыватели сделки, окончательное решение - создать файл сценария JS, подобный приведенному ниже, который будет запускать вашу команду в скрытом окне, ждать, пока ваша команда завершится, и вернет свой код ошибки:

WScript.CreateObject("WScript.Shell")
.Run('powershell -File C:\\Path\\To\\MyScript.ps1', 0,true);

Сохраните это как файл js (myjob.js) и добавьте его в свой планировщик задач: наслаждаться

2

«Запустить, вошел ли пользователь в систему или нет», разрешит работу скрытой опции. Обратите внимание, что вам нужно предоставить свои учетные данные после выбора этого.

1

И то и другое :

  • Изменение пользователя, выполняющего задачу, на SYSTEM "
  • и проверка «Запустить, вошел ли пользователь в систему или нет»

предотвратит черное командное окно, но помните о недостатках: вы не сможете работать с некоторыми инструментами автоматизации графического интерфейса, такими как «AutoIt» или SendKeys в PowerShell, поскольку Windows запускает задачи в среде безголового стиля.

1

Я оставляю настройки по умолчанию и пишу короткие пользовательские программы, которые запускают выполнение без отображения окна. Например, чтобы запустить пакетный файл без всплывающего окна командной строки, используйте код ниже. Установите задачу для появления "RunBatchFile.exe (path_to_batch_file)".

class Program
{
    static void Main(string[] args)
    {
        try
        {
            if (args.Length < 1)
            {
                Console.WriteLine("No batch file");
                Console.WriteLine("Usage: RunBatchFile (path)");
                Environment.Exit(1);
            }

            if (!File.Exists(args[0]))
            {
                Console.WriteLine("Batch file {0} not found", args[0]);
                Console.WriteLine("Usage: RunBatchFile (path)");
                Environment.Exit(1);
            }

            // Set to batch file's folder
            string startIn = Path.GetDirectoryName(args[0]);
            if (!string.IsNullOrEmpty(startIn) && Directory.Exists(startIn))
                Directory.SetCurrentDirectory(startIn);

            // Start
            ProcessStartInfo pi = new ProcessStartInfo()
            {
                FileName = args[0],
                UseShellExecute = true,
                WindowStyle = ProcessWindowStyle.Hidden
            };
            Process.Start(pi);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception: " + ex.ToString());
        }
    }
}
0

У меня была эта проблема с запланированными задачами powershell (которые я развертывал через GPO). В итоге я завернул его в командное окно:

CMD
/Q /D /C "powershell.exe -Command "& '\\MYDOMAIN\netlogon\MyPowerShellScript.ps1'""

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .