Sytuacja
Mam skrypt wsadowy, który przygotowuje niektóre pliki, wykonuje program ( .exe
), a następnie usuwa te pliki.
To zadanie powinno być uruchamiane co godzinę, więc próbuję je skonfigurować za pomocą Zaplanowanych zadań. Problem polega na tym, że poprzednio wspomniany program nie działa poprawnie, gdy jest wywoływany z zadania (ani przez .bat
skrypt, ani podczas .exe
bezpośredniego wywoływania ), ale nie otrzymuję żadnych ostrzeżeń ani komunikatów o błędach w dziennikach.
Ustawiać
Zadanie jest skonfigurowane do działania jako konto usługi systemu Windows, które ma poprawnie ustawione wszystkie uprawnienia. Używając tego konta do logowania przez RDP, mogę wykonać .bat
i .exe
bezpośrednio bez problemów, ale wydaje się, że zadanie nic nie robi. Można to łatwo zaobserwować, ponieważ program zawsze modyfikuje plik, a zmodyfikowany znacznik czasu nie zmienia się w zadaniu.
W dziennikach zaplanowanych zadań otrzymuję komunikaty informacyjne dotyczące zadania rozpoczynającego, kończącego proces itp. „Kod wyniku” jest jednak taki 111
(próbowałem to zrobić bez powodzenia w Google, jedyne skojarzenie, jakie otrzymałem, to „nazwa pliku jest za długa) ”, co jest po prostu zupełnie nieistotne AFAIK). W dziennikach aplikacji nie otrzymuję absolutnie nic.
Podejrzewam, że problem
Program jest starą potwornością, która odradza jakiś ekran powitalny (w rzeczywistości jest to normalne okno), mimo że GUI nie jest potrzebne, ponieważ nie wymaga interakcji i zamyka się po operacjach. Okno pojawi się na około 2 sekundy.
Podejrzewam, że to wymaganie dotyczące GUI ma coś wspólnego z niepowodzeniem zadania, ale nie jestem pewien. Kiedy loguję się do użytkownika, na którym działa zadanie (przez RDP), po uruchomieniu zaplanowanego zadania nie pojawia się żadne okno.
Edytuj informacje o GUI
Zbudowałem bardzo mały plik wykonywalny C #, który uruchamia program bez głównego okna (za pomocą ProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden
). Nawet w ten sposób zaplanowane zadanie nadal nie uruchamia się poprawnie, ale kod powrotu jest teraz 0
.
Aktualizacja
Gdy konfiguruję zadanie, aby powiedzieć „uruchom bez względu na to, czy użytkownik jest zalogowany”, a run with highest privileges
opcja nie jest zaznaczona , wartością błędu jest 2147943859
.
Co mogę zrobić, aby rozwiązać problem?
System operacyjny = Windows Server 2008 R2 SP1
Jeśli potrzebujesz więcej informacji, daj mi znać w komentarzach.
.exe
„programu” z parametrami ze skryptu, dane wejściowe muszą być poprawnie podane jako argument.Odpowiedzi:
Uważam, że Twój problem dotyczy uprawnień konta używanych do uruchomienia zadania lub kontekstu konta istniejącego podczas próby uruchomienia zadania.
Przetestuj wymagania dotyczące sesji konsoli
Możliwe, że Twój plik .EXE musi być uruchomiony w
Console
sesji (aka Sesja 0) na komputerze. Aby to sprawdzić:QWINSTA
obserwujSESSIONNAME
kolumnę i potwierdź, że>
wskaźnik znajduje się obokconsole
, innymi słowy powinien wyglądać jak>console
)Jeśli zadanie działa poprawnie, spróbuj zaplanować zadanie przy
SCHTASKS.EXE
użyciu/IT
parametru. W przeciwnym razie możesz nie mieć innego wyjścia, niż skonfigurować komputer tak, aby automatycznie logował się jako konto użytkownika usługi i uruchamiał zadanie jako program startowy.Sprawdź uprawnienia
Ponadto, jak już zasugerowałem, sprawdź następujące elementy, aby potwierdzić, że konto użyte do uruchomienia zadania ma odpowiednie uprawnienia:
Computer Configuration/Windows Settings/Security Settings/Local Policies/User Rights Assignments
)Effective Permissions
karty w pliku / folderu na właściwości wSecurity > Advanced
Dodatkowe rzeczy do sprawdzenia / wypróbowania
Dodaj rejestrowanie do pliku wsadowego. Po każdym wierszu, który wykonuje, zapisz jakieś dane wyjściowe do pliku dziennika, abyś wiedział, gdzie się zacina. Na przykład:
Spróbuj uruchomić swój .EXE z
START
, na przykładSTART "myTitle" "C:\full\path\to\my.EXE"
źródło
Odpowiadam na stary post na wypadek, gdyby pomógł komuś innemu. Miałem ten sam problem. Dziennik zdarzeń powiedział, że program zakończył się normalnie, ale nawet pierwszy wiersz kodu nie zapisałby dla mnie dziennika. Skończyło się to na opcji „Rozpocznij w” w Harmonogramie zadań. Przyszło mi do głowy, że program działał poprawnie z wiersza poleceń, gdy byłem w bieżącym katalogu. W tym samym katalogu znajdują się pliki manifestu i inne zależności. Jeśli więc powiesz zaplanowanemu zadaniu, aby uruchomiło się w tym samym katalogu co plik EXE, możesz uzyskać korzystne wyniki. To było dla mnie rozwiązanie.
źródło
może to ci pomaga?
/programming/6939548/a-workaround-for-the-fact-that-a-scheduled-task-in-windows-requires-a-user-to-be
Mieliśmy podobny problem i jedynym rozwiązaniem było założenie specjalnego konta na serwerze z autologinem. Więc jeśli zadanie działało pod zalogowanym już użytkownikiem, nasz plik .exe działał dobrze ...
wiem, że to nie jest bardzo miłe rozwiązanie, ale dla nas było to jedyne, co zadziałało. nie wiem, czy to działa dla ciebie ... (Ale przy tej pracy musisz sprawdzić, czy użytkownik jest cały czas zalogowany ...)
źródło
Windows Vista/Windows Server 2008
lubWindows 7/Windows Server 2008 R2
. Wydaje się, że nie ma znaczenia.Faceci z firmy, która obsługuje serwery naszych klientów, powiedzieli, że program GUI nie uruchomi się w żaden sposób według zaplanowanych zadań.
Korzystają z systemu monitorowania, który ma również funkcje planowania zadań. Skonfigurowali to przez to i wydaje się, że działa.
Przepraszam, że nie miałem okazji ocenić tutaj więcej sugestii, ale dzięki za próbę i tak pomocy. Mam nadzieję, że może pomóc innym w przyszłości, co, jak sądzę, na pewno pomoże.
źródło
Próbowałem uruchomić stary program VB6 przy użyciu programu do planowania zadań na serwerze z systemem Windows 2008 R2. Aplikacja działałaby z exe, poprzez plik wsadowy lub klikając skrót, ale nie uruchamiałaby się z harmonogramu zadań. Odkryłem, że kiedy pliki konfiguracyjne aplikacji, które były przechowywane w folderze aplikacji w katalogu C: \ program files (x86), zostały skopiowane do folderu aplikacji na c: \ programdata. harmonogram działał. wygląda na to, że cmd.exe stosuje konfigurację z innej lokalizacji niż ta używana przez harmonogram zadań. Jeśli aplikacja ma pliki konfiguracyjne, możesz spróbować przenieść je do folderu c: \ programdata \ application.
źródło
Czy odwołujesz się do mapowanych dysków sieciowych w skrypcie lub programie? Przez jakiś czas miałem podobny problem, w którym moje zaplanowane zadanie nie działało i nie mogłem zrozumieć, dlaczego. Zmiana ścieżki (ścieżek) na ścieżki UNC rozwiązała to dla mnie.
Zmień
T:\Apps\MyProgram.exe
na\\MyServer\MyShare\Apps\MyProgram.exe
źródło
C:
dysku lokalnym .2147943859 przekonwertowany na Hex to 800705b3, co według krótkiej podróży do Google oznacza „Nie można uruchomić programu instalacyjnego na komputerze. Ta operacja wymaga interaktywnej stacji okien”.
Teraz może być jakiś sposób, aby uruchomić go interaktywnie bez użycia PSEXEC (z Sysinternals), ale ponieważ już wiem, jak to zrobić za pomocą PSEXEC, tego właśnie użyłbym.
PSExec: http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx
Dlatego zmień swoje działanie, aby dodać wszystko za pomocą psexec.exe -i (i -h, jeśli potrzebujesz go podwyższyć) i powinno działać.
Próbowałem tego na Windows Server 2008 R2 SP1 z następującymi elementami w mojej „akcji”:
a następnie parametry:
Po ręcznym uruchomieniu zadania (ponieważ nie mam jego harmonogramu) w bieżącej sesji pojawia się notatnik z podwyższonym poziomem uprawnień.
źródło
Może odpowiedź na to pytanie pomoże komuś innemu przeczytać ten wątek?
/programming/32589381/
Podsumowanie: Zaplanowane zadania systemu Windows 2012 nie zawierają poprawnych zmiennych środowiskowych, w tym
PATH
konta, dla którego zadanie ma być uruchamiane.Przeczytałem to wszystko dość długo, zanim zrozumiałem powyższe. (Co było moim własnym problemem prowadzącym do tego samego, co pytanie PO).
Gdy już to wiesz (w końcu!), Możesz łatwo to sprawdzić (zgodnie z odpowiedzią dotyczącą przepełnienia stosu), zobaczyć, jak to się dzieje i obejść ...
źródło