Скрытая настройка планировщика заданий Windows 7 не работает


37

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

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

введите описание изображения здесь

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



2
В связанном вопросе не упоминается скрытый параметр.
bwDraco

@DragonLord Вы правы, но трудно сказать, является ли этот вопрос «Почему не работает Hidden?», Или на самом деле «Как я могу остановить показ этого окна?».
Ƭᴇcʜιᴇ007

@ techie007: Вопрос в том, как сделать окно скрытым, что, как я думал, делает скрытый флажок. Но эта статья посвящена сценариям, планировщику задач командной строки и сценариям оболочки, а не графическому интерфейсу планировщика задач, показанному в моем посте. Знаете ли вы, как использовать графический интерфейс для этого?
Джошуа Франк

В большинстве случаев вы не можете сделать это только из графического интерфейса планировщика задач. Обычно вам нужно изменить то, что запускается действием задачи (например, пакетный файл или скрипт), чтобы скрыть всплывающее подокно. Это то, что касается другого вопроса, и именно поэтому я пометил его как возможный обман. :)
Ƭᴇcʜιᴇ007

Ответы:


45

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


4
Так просто, как, что. Этот ответ должен быть принятым.
Ролв

Спасибо. У меня была противоположная проблема. Я хотел, чтобы консоль отображалась, но это не так!
Рэнди Стегбауэр,

12
Это требует сохранения пароля вместе с задачей и в следующий раз скрытно прервет смену пароля (что обычно применяется в политиках домена в корпоративных средах).
Филипп Мунин

@PhilippMunin В некоторых случаях вы можете обойтись без галочки «Не хранить пароль». Задача будет иметь доступ только к локальным ресурсам компьютера. ', Что устранит необходимость ввода пароля.
Джимадин

20

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

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

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

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

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

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

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


Это звучит так, но и этого не происходит; Я вижу задачи в планировщике. Это был бы странный интерфейс, который работал с объектами, которые вы не могли видеть.
Джошуа Франк

2
У вас есть Показать скрытые задачи, отмеченные в меню Вид?
Каран

1
Ах, я сделал, так что это объясняет. Спасибо. Конечно, поскольку «Скрытый» не делает то, что я думал, мне не нужны скрытые задачи. Поскольку это инструмент только для администратора, а администраторы обычно не любят скрывать от них что-то, для чего служит скрытая задача?
Джошуа Франк

2
Кто знает, конечно, я никогда не использовал эту опцию. Ваш вопрос был в первый раз, когда я посмотрел его, чтобы увидеть, что он сделал. :) Кстати, вместо того, чтобы сменить пользователя на SYSTEM, решает ли вопрос «Запускать, вошел ли пользователь в систему или нет»?
Каран

18

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

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

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

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


Прочитайте мой ответ выше, может объяснить, что он делает.
Каран

2
Этот ответ SU затрагивает идею запуска его от имени другого пользователя, чтобы также не видеть вывод. Я не думаю, что есть какая-то конкретная причина для запуска его как «Система», вы можете создать пользователя только для запуска этой задачи с разрешениями, которые вы решите предоставить им.
Ƭᴇcʜιᴇ007

Но почему настроенный пользователь влияет на видимость окна?
Джошуа Франк

1
Помните, что SYSTEMучетная запись не имеет доступа к зашифрованным EFS-файлам других пользователей.
Ноль3

11

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

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

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

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

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


Кроме того, вы должны использовать Wscript.exe для запуска вашего скрипта, а не Cscript. В противном случае, черное окно консоли может появиться на мгновение.
BBK

Вот еще один пример VBScript, который работает для меня: faqforge.com/windows/…
BBK

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

1
И я предполагаю, что волшебство, которое делает, скрыто определенно из-за ProcessWindowStyle.Hiddenчасти определенно, правильно? Я вижу кое-что об этом здесь: msdn.microsoft.com/en-us/library/…
Pimp Juice IT

Да, это то, что скрывает окно. Без этого всплывет окно.
AresAvatar

1
Этот код, как написано, будет работать на всем, что работает с ShellExecute.
AresAvatar

0

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

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

Хотя это может дать ответ на вопрос, было бы лучше, если бы вы могли объяснить, почему это так.
DavidPostill
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.