Windows 7 Harmonogram zadań Ukryte ustawienie nie działa

37

Mam proces demona, który uruchamiam na mojej maszynie co godzinę, i chociaż zaznaczyłem to Hiddenpole, to nie działa.Właściwości zadania

Co godzinę zadanie jest uruchamiane, ale pokazuje czarne okno poleceń, w którym działa moja aplikacja konsoli .NET. Pozostaje widoczny, dopóki zadanie się nie zakończy, a następnie znika. Jest to bardzo denerwujące, ponieważ wyskakuje i przerywa wszystko, co robię:

wprowadź opis zdjęcia tutaj

Naprawdę chcę to ukryć, więc jak mogę to naprawić?

Joshua Frank
źródło
możliwy duplikat wyskakującego okna Stop taskeng.exe
Ƭᴇcʜιᴇ007
2
Połączone pytanie nie wspomina o ustawieniu Ukryty .
bwDraco
@DragonLord Masz rację, ale trudno powiedzieć, czy to pytanie brzmi „Dlaczego ukryty nie działa?”, Czy też w rzeczywistości „Jak mogę zatrzymać wyświetlanie tego pola?”.
Ƭᴇcʜιᴇ007
@ techie007: Pytanie brzmi: jak ukryć okno, tak myślałem, że ukryte pole wyboru działa. Ale ten linkowany artykuł dotyczy skryptów i harmonogramu zadań wiersza poleceń i skryptów powłoki, a nie graficznego interfejsu użytkownika harmonogramu zadań pokazanego w moim poście. Czy wiesz, jak korzystać z GUI, aby to osiągnąć?
Joshua Frank
W większości przypadków nie można tego zrobić tylko z poziomu graficznego interfejsu użytkownika Harmonogramu zadań. Zwykle musisz zmodyfikować to, co jest uruchamiane przez akcję zadania (tj. Plik wsadowy lub skrypt), aby ukryć wyskakujące okienko podrzędne. To właśnie obejmuje inne pytanie i dlatego oznaczyłem je jako możliwe duplikat. :)
Ƭᴇcʜιᴇ007

Odpowiedzi:

45

Zaznacz pole wyboru „Uruchom, czy użytkownik jest zalogowany czy nie”, a plik wykonywalny będzie działał w tle.

Paproć
źródło
4
Tak proste jak to. Ta odpowiedź powinna być zaakceptowana.
rolve
Dziękuję Ci. Miałem odwrotny problem. I chciał konsolę do wyświetlacza, ale nie było!
Randy Stegbauer,
12
Wymaga to zapisania hasła do zadania i w tajemnicy złamie kolejne zmiany hasła (co zwykle jest egzekwowane przez zasady domeny w środowiskach korporacyjnych).
Philipp Munin
@PhilippMunin W niektórych przypadkach użycia może być możliwe uniknięcie zaznaczenia pola wyboru „Nie przechowuj hasła. Zadanie będzie miało dostęp tylko do lokalnych zasobów komputerowych. ”, Co pozwoliłoby uniknąć podania hasła.
Jimadine
20

Dlaczego zaplanowane zadanie systemu Windows 7 działa ukryte? powinien wyjaśnić, dlaczego tak się dzieje.

Ponadto ten opis TechNet ogólnych właściwości zadania stwierdza:

Ogólne właściwości zadania są wyświetlane na karcie Ogólne w oknie dialogowym Właściwości zadania lub Utwórz zadanie. Ogólne właściwości zadania obejmują nazwę zadania, autora, opis, opcje bezpieczeństwa, system operacyjny, dla którego skonfigurowano zadanie oraz właściwość kontrolującą, czy zadanie jest ukryte .

Kiedy tworzysz zadanie w folderze zadań, musisz nazwać zadanie. Żadne dwa zadania nie mogą mieć tej samej nazwy, jeśli znajdują się w tym samym folderze zadań. Opis zadania jest opcjonalny.

Opcje bezpieczeństwa zadania określają kontekst bezpieczeństwa, w którym działa zadanie. Aby uzyskać więcej informacji, zobacz Kontekst Zabezpieczenia zadania.

Domyślnie ukryte zadania nie są wyświetlane w interfejsie użytkownika Harmonogramu zadań. Możesz przeglądać ukryte zadania, gdy w menu Widok wybrano opcję Pokaż ukryte zadania. Zadanie można ukryć, klikając pole wyboru Ukryty na karcie Ogólne w oknie dialogowym Właściwości zadania lub Utwórz zadanie.

Czy to nie oznacza, że ​​pole wyboru ukrywa samo zadanie przed interfejsem użytkownika programu planującego, a nie rzeczywisty program, który jest zaplanowany?

Karan
źródło
Brzmi to w ten sposób, ale też tego nie robi; Widzę zadania w Harmonogramie. Byłby to dziwny interfejs użytkownika, który działał z obiektami, których nie można było zobaczyć.
Joshua Frank
2
Czy masz zaznaczone Pokaż ukryte zadania w menu Widok?
Karan
1
Ach, zrobiłem to, więc to wyjaśnia. Dzięki. Oczywiście, ponieważ „Ukryty” nie robi tego, co myślałem, nie potrzebuję ukrytych zadań. Ponieważ jest to narzędzie tylko dla administratora, a ponieważ administratorzy zazwyczaj nie lubią ukrywać przed nimi rzeczy, w jakim celu służy ukryte zadanie?
Joshua Frank,
2
Kto wie, z pewnością ja nigdy nie stosować tej opcji. Twoje pytanie było po raz pierwszy, gdy sprawdziłem, co się stało. :) BTW, zamiast zmienić użytkownika na SYSTEM, czy wybranie „Uruchom bez względu na to, czy użytkownik jest zalogowany” rozwiązuje problem?
Karan
18

Ok, po kilku dalszych badaniach znalazłem tę odpowiedź na StackOverflow:

Aby skonfigurować zaplanowane zadanie do działania w tle, zmień użytkownika uruchamiającego zadanie na SYSTEM, a na ekranie nic się nie pojawi.

Komentarz wskazuje, że daje to pełne prawa do zadania, co może być denerwujące, ale w tym przypadku jest dopuszczalne.

Ale nadal co robi Hidden, jeśli tego nie robi? I dlaczego konto użytkownika, na którym działa program, ma coś wspólnego z tym, czy jest widoczne?

Joshua Frank
źródło
Przeczytaj moją odpowiedź powyżej, może wyjaśnić, co robi.
Karan
2
Ta odpowiedź SU dotyczy idei uruchomienia go jako innego użytkownika, aby uniknąć oglądania również wyniku. Nie sądzę, aby istniał jakiś konkretny powód, aby uruchamiać go jako „System”, możesz zmusić użytkownika do uruchamiania tego zadania, z uprawnieniami, które mu przyznasz.
Ƭᴇcʜιᴇ007
Ale dlaczego skonfigurowany użytkownik miałby wpłynąć na widoczność okna?
Joshua Frank,
1
Pamiętaj, że SYSTEMkonto nie ma dostępu do zaszyfrowanych plików EFS innych użytkowników.
Zero3,
11

NAJLEPSZE ROZWIĄZANIE

  • Zmiana użytkownika uruchamiającego zadanie na SYSTEM - spowoduje wykonanie polecenia spoza użytkownika
  • Zaznaczenie „Uruchom bez względu na to, czy użytkownik jest zalogowany” - wymaga zapisania hasła do zadania i w ukryty sposób złamie następną zmianę hasła (co zwykle jest egzekwowane przez zasady domeny w środowiskach korporacyjnych)

Jeśli są to dla Ciebie przełamanie, ostatecznym rozwiązaniem jest utworzenie pliku skryptu JS, takiego jak poniższy, który uruchomi twoje polecenie w ukrytym oknie, zaczekaj na jego zakończenie i zwróć kod błędu:

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

Zapisz to jako plik js (myjob.js) i dodaj to do harmonogramu zadań: wprowadź opis zdjęcia tutaj Ciesz się

Philipp Munin
źródło
Ponadto należy użyć Wscript.exe do uruchomienia skryptu, a nie Cscript. W przeciwnym razie na chwilę może pojawić się czarne okno konsoli.
BBK
Oto kolejny przykład VBScript, który działa dla mnie: faqforge.com/windows/…
BBK
2

„Uruchom bez względu na to, czy użytkownik jest zalogowany”, umożliwi działanie ukrytej opcji. Pamiętaj, że musisz wybrać swoje poświadczenia po wybraniu tego.

Tran Viet Cuong
źródło
1

Obie :

  • Zmiana użytkownika uruchamiającego zadanie na SYSTEM ”
  • i zaznaczając „Uruchom, czy użytkownik jest zalogowany, czy nie”

zapobiegnie czarnemu oknu poleceń, ale pamiętaj o wadach: nie będziesz w stanie pracować z niektórymi narzędziami do automatyzacji GUI, takimi jak „AutoIt” lub SendKeys w PowerShell, ponieważ Windows uruchamia zadania w środowisku bezgłowym.

Gabriel Glenn
źródło
1

Opuszczam ustawienia domyślne i piszę krótkie programy niestandardowe, które spawnują wykonanie bez wyświetlania okna. Na przykład, aby uruchomić plik wsadowy bez wyskakującego okna wiersza polecenia, użyj poniższego kodu. Ustaw zadanie spawnowania „RunBatchFile.exe (ścieżka_do_pliku_batch)”.

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());
        }
    }
}
AresAvatar
źródło
1
I zakładam, że magia, która sprawia, że ​​jest ukryta, wynika konkretnie z tej ProcessWindowStyle.Hiddenczęści, prawda? Widzę coś o tym tutaj: msdn.microsoft.com/en-us/library/…
Pimp Juice IT
Tak, to ukrywa okno. Bez niego wyskoczy okno.
AresAvatar
1
Ten kod, jak napisano, będzie działał na wszystkim, co działa z ShellExecute.
AresAvatar
0

Miałem ten problem z zaplanowanymi zadaniami PowerShell (które wdrażałem przez GPO). Skończyłem owijanie go w oknie poleceń:

CMD
/Q /D /C "powershell.exe -Command "& '\\MYDOMAIN\netlogon\MyPowerShellScript.ps1'""
Berwin22
źródło
Chociaż może to odpowiedzieć na pytanie, lepszym rozwiązaniem byłoby wyjaśnienie, dlaczego tak się dzieje.
DavidPostill