Налаштування прихованого планувальника завдань Windows 7 не працює


37

У мене процес демона, який я щогодини запускаю на своїй машині, і хоча я поставив Hiddenпрапорець, він не працює.Властивості завдання

Кожну годину завдання виконується, але воно показує чорне вікно команди, в якому працює мій додаток .NET Console. Це залишається видимим, поки завдання не буде виконано, а потім зникне. Це дуже дратує, бо воно спливає і перебиває все, що я роблю:

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

Я дійсно хочу, щоб це було прихованим, так як я можу це виправити?


можливий дублікат вікна Stop taskeng.exe зі
спливу

2
Пов'язане запитання не згадує налаштування Прихована .
bwDraco

@DragonLord Ви маєте рацію, але важко сказати, чи це питання "Чому прихована робота не працює?", Чи це насправді "Як я зупиняю показ цього вікна?".
Ƭᴇcʜιᴇ007

@ techie007: Питання полягає в тому, як зробити вікно прихованим, що я вважав, що це прихований прапорець. Але ця пов’язана стаття стосується скриптів та планувальників завдань командного рядка та скриптів оболонки, а не GUI планувальника завдань, показаних у моєму дописі. Чи знаєте ви, як використовувати графічний інтерфейс для цього?
Джошуа Франк

У більшості випадків ви не можете це зробити лише з графічного інтерфейсу планувальника завдань. Зазвичай вам потрібно змінити те, що виконується дією завдання (тобто: пакетним файлом або сценарієм), щоб приховати спливаюче вікно, яке з'являється. Ось що стосується іншого питання, і саме тому я позначив це як можливий дурп. :)
Ƭᴇcʜιᴇ007

Відповіді:


45

Поставте прапорець "Запустити, чи користувач увійшов чи ні", і виконуваний файл буде працювати у фоновому режимі.


4
Так просто. Ця відповідь має бути прийнятою.
rolve

Дякую. У мене була протилежна проблема. Я хотів, щоб консоль відображалася, але цього не було!
Ренді Штегбауер

12
Це вимагає збереження пароля із завданням і приховано порушить наступний раз зміни пароля (що зазвичай застосовується політикою домену в корпоративних середовищах).
Філіп Мунін

@PhilippMunin У певних випадках використання, можливо, ви зможете уникнути, встановивши прапорець "Не зберігати пароль". Завдання матиме доступ лише до локальних комп'ютерних ресурсів. ', Що забороняє введення пароля.
Джимадін

20

Чому запускається заплановане завдання Windows 7? слід пояснити, чому це відбувається.

Також у цьому описі TechNet Загальних властивостей завдань зазначено:

Загальні властивості завдання відображаються на вкладці Загальні діалогового вікна Властивості задач або Створити завдання. Загальні властивості завдання включають ім'я завдання, автора, опис, параметри безпеки, операційну систему, для якої налаштовано завдання, та властивість, яка контролює, чи не приховано завдання .

Коли ви створюєте завдання в папці із завданнями, ви повинні назвати це завдання. Жодна задача не може мати однакову назву, якщо вони знаходяться в одній папці завдань. Опис завдання необов’язковий.

Параметри захисту завдань задають контекст безпеки, під яким виконується завдання. Для отримання додаткової інформації див. Контекст безпеки завдань.

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

Чи не означає це, що прапорець приховує лише саму задачу від інтерфейсу планувальника, а не фактичну програму, яка запланована?


Це і звучить так, але і цього не робить; Я бачу завдання в Планувальнику. Це був би дивний інтерфейс користувача, який працював з об'єктами, які ви не бачили.
Джошуа Френк

2
Чи встановлено прапорець Показати приховані завдання у меню Перегляд?
Каран

1
Ага, я це зробив, так що це пояснює. Спасибі. Звичайно, оскільки "Прихований" не робить того, що я думав, у мене немає потреби в прихованих завданнях. Оскільки це лише інструмент для адміністратора, а оскільки адміністратори, як правило, не люблять ховати від них речі, то якою метою служить приховане завдання?
Джошуа Франк

2
Хтозна, звичайно, я ніколи не використовував цей варіант. Ваше запитання було вперше, коли я його подивився, щоб побачити, що він зробив. :) BTW замість того, щоб змінити користувача на SYSTEM, вирішує проблему вибір "Запустити, чи користувач увійшов чи ні"?
Каран

18

Гаразд, після ще кількох досліджень я знайшов цю відповідь на StackOverflow:

Щоб налаштувати заплановану задачу для запуску у фоновому режимі, змініть Користувача, який виконує завдання, на СИСТЕМУ, і на вашому екрані нічого не з’явиться.

У коментарі вказується, що це надає повні права на завдання, яке може бути роздратованим, але прийнятне в цьому випадку.

Але все-таки, що Hiddenробити, якщо цього не робити? І чому обліковий запис користувача, який працює у програмі, має щось спільне з тим, чи воно видно?


Прочитайте мою відповідь вище, може пояснити, що це робить.
Каран

2
Ця відповідь SU стосується ідеї запустити його як іншого користувача, щоб також не побачити вихід. Я не думаю, що є певна причина запустити його як "Система", ви можете зробити користувача просто для виконання цього завдання, з дозволами, які ви вирішите їм надати.
Ƭᴇcʜιᴇ007

Але чому налаштований користувач вплине на видимість вікна?
Джошуа Франк

1
Майте на увазі, що SYSTEMобліковий запис не має доступу до зашифрованих файлів EFS інших користувачів.
Zero3

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

У мене була ця проблема із запланованими завданнями, що розраховані на повноваження (які я розгортав через GPO). Я закінчив загортати його у вікно команд:

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

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