Pomoże to zrozumieć problem z innej perspektywy. Powiedzmy, że jesteś programistą, którego zadaniem jest dodanie harmonogramu zadań do systemu Windows. Jak byś to zrobił? Masz kilka problemów, z którymi musisz się zmierzyć: Jeśli zadanie jest uruchamiane jako osoba inna niż zalogowany użytkownik, czy powinieneś denerwować zalogowanego użytkownika jakimś wyskakującym okienkiem błędu? Co jeśli nie ma zalogowanego użytkownika w momencie uruchamiania zadania? Co z różnicą między programem GUI a programem konsoli? GUI nie mają stdin, stdout i stderr; koncepcja jest w nich bez znaczenia. Co z programami wewnętrznymi lub zewnętrznymi do COMMAND.COM/CMD.EXE? Lub inne silniki skryptowe? Co ze ścieżkami ze spacjami w nazwie polecenia? Lub w parametrach (opcje / argumenty)? (Gdy próbujesz sobie teraz poradzić ...)
Chociaż w tym przypadku nie jestem w 100% pewien co do wewnętrznych elementów ani pełnych szczegółów technicznych, odpowiedzi wydają się być… Zadania są uruchamiane w odizolowanej, nieinteraktywnej sesji, która nie może wchodzić w interakcje z aktualnie zalogowanym użytkownikiem (jeśli w ogóle ); Uruchamia się, oczekując, że nie będzie żadnego wyjścia konsoli, ponieważ jest nieinteraktywny, nie może po prostu przerwać zalogowanego użytkownika, aby pokazać wyjście, w każdym razie (a jeśli jest wyjście, stdin jest bitbucket / NULL, stdout i stderr zostają zalogowane do funkcja logowania do systemu); Spacje są obsługiwane przez pominięcie problemu: nazwa polecenia jest pobierana DOKŁADNIE w takiej postaci, w jakiej jest, a parametry przekazywane do polecenia są określone w innym polu wejściowym we właściwościach zadania.
Oznacza to, że twoje zadanie musi być uruchomione tak, jakby było demonem (w świecie Un * x). Wszystko jest statyczne i precyzyjne. Nazwa polecenia jest faktyczną nazwą polecenia, bez żadnych parametrów. Często obejmuje to uruchamianie interpreterów poleceń / skryptów, takich jak CMD.EXE! Parametry, jeśli istnieją, są określone gdzie indziej i muszą być znane podczas konfigurowania zadania (tzn. Nie można zmieniać parametrów „w locie”). I tak dalej.
Tak więc, jeśli chcesz dołączyć parametry, musisz użyć sekcji parametrów, aby określić parametry. Harmonogram zadań niespróbuj parsować nazwę polecenia, aby podzielić go na „polecenie” i „argumenty”, tak jak robią to programy wiersza poleceń. Po prostu traktuje to jako jedną wielką, pełną nazwę polecenia. Podobnie, jeśli chcesz parametrów zmiennych, takich jak użycie% 1 ..% n w plikach BATCH, nie możesz tego zrobić z poziomu samego Harmonogramu zadań; Musisz znaleźć inny sposób. (Należy pamiętać, że nie można również używać zmiennych środowiskowych, ponieważ środowisko przekazane do programu zależy od środowiska, w którym uruchamiane jest zadanie, a NIE od środowiska „bieżącego”.) Można użyć pliku tymczasowego do zapisania parametrów, ale ponieważ musisz określić statyczną nazwę pliku we właściwościach zadania, co dzieje się, gdy jesteś w sieci z 5000 użytkownikami i czterech z nich próbuje uruchomić to samo zadanie w tym samym czasie? Wszyscy będą się wzajemnie zaciskać, próbując jednocześnie zapisać w tym samym pliku tymczasowym, prawdopodobnie też nie to, czego chciałeś. (Istnieją również rozwiązania tego problemu, ale wykracza to zbyt daleko poza zakres tego pytania i odpowiedzi ..)
Ostateczna odpowiedź: w prostym przypadku - ścieżka, którą chcesz przekazać jako parametr, jest statyczna i nie zmienia się - albo musisz podać parametry w odpowiedniej właściwości Zadania (Argumenty), a nie w polu Program / Skrypt lub użyj pliku wsadowego. W bardziej złożonym przypadku - musisz zadać właściwe pytanie lub zbadać, w jaki sposób działają demony i jak używać blokowania / semaforów i tym podobnych do komunikacji międzyprocesowej (IPC).
Powodzenia.