Uruchom program przy uruchamianiu komputera, gdy nikt nie jest zalogowany, i wyświetl okno, gdy ktoś się zaloguje (system operacyjny: Windows)


19

Mam program uruchamiany podczas uruchamiania systemu za pomocą Harmonogramu zadań w systemie Windows Server 2012. Program musi zostać uruchomiony, nawet jeśli komputer uruchomi się ponownie automatycznie.

Administrator jest kontem używanym do uruchamiania programu, dla zadania zaznaczona jest opcja „Uruchom niezależnie od tego, czy użytkownik jest zalogowany”.

Problem polega na tym, że gdy ktoś w końcu zaloguje się jako Administrator za pomocą Podłączania pulpitu zdalnego, interfejs (okno programu) jest ukryty.

Jak rozumiem, nie ma sposobu, aby rozwiązać ten problem za pomocą Harmonogramu zadań.

Jak mogę to rozwiązać?

Powinien to być dość powszechny problem, ale nie mogę nic znaleźć, przeszukując sieć. Jestem dość zaskoczony, że Microsoft zezwala na takie ograniczenie w swoim harmonogramie. Czy mogę stworzyć VBScript lub coś, co działa podczas uruchamiania i uruchamia program, który będzie widoczny po zalogowaniu się użytkownika?

Inne pomysły?

(Nie chcę tworzyć osobnego programu opartego tylko na interfejsie GUI, który nawiasem mówiąc, łączy się z oryginalnym programem. Wolałbym również, jeśli nie muszę kończyć już działającego programu po zalogowaniu użytkownika, a następnie uruchomić to znowu.)


2
Firedaemon, zainstaluj aplikację jako usługę, gdy RDPed przełącz się na „Sesję 0” za pomocą Firedaemon. Zobacz aplikację.
TheCleaner

Technicznie można to zrobić, jeśli opracujesz własną usługę.
Ryan Ries

1
Właśnie odpowiedziałem na moje pytanie. Nie mogę zaakceptować mojej własnej odpowiedzi przez dwa dni, ponieważ system tutaj na serverfault.com jest bardzo zły (większość ludzi po prostu zrezygnuje z tej strony bez czekania dwóch dni i pozostawi pytanie na zawsze oznaczone jako nierozwiązane).
Marcus

2
@Marcus: Ograniczenia dotyczące tego, kto może robić, co i kiedy mają na celu powstrzymanie niektórych nadużyć. Niestety, czasami powodują niedogodności w przypadku autentycznych prób robienia rzeczy dobrze, ale czasem trzeba wprowadzić takie kompromisy. Jeśli masz sugestię, która może poprawić sytuację (co najmniej równie dobrze chronić witrynę, ale mniej utrudniać autentycznym użytkownikom), lepszym pomysłem byłoby poruszenie tej kwestii za pośrednictwem odpowiedniej witryny „meta” ( meta.serverfault.com , meta). stackoverflow.com ) zamiast narzekać w komentarzu, że osoby prowadzące witrynę raczej nie zobaczą.
David Spillett

Jak widać z głosowania, odpowiedź, którą chcesz zaakceptować, nie jest tą, którą ludzie akceptują, ponieważ sposób, w jaki starasz się o to poradzić, jest niewłaściwy na początku.
JamesRyan

Odpowiedzi:


28

Zrozumiałem, jak to zrobić sam. Jest to trochę obejście, ale tego się spodziewałem.

Zatrzymać! Nie maruduj jeszcze. Czytaj...

  • Uruchom go, ustaw tak, aby Administrator automatycznie się logował.

  • Utwórz zadanie w Harmonogramie zadań. Ustaw, aby działał tylko wtedy, gdy użytkownik (Administrator) jest zalogowany. Trigger jest „przy logowaniu” i określa, że ​​dzieje się tak tylko wtedy, gdy administrator się loguje.

  • Utwórz drugie zadanie. Uruchom tylko wtedy, gdy użytkownik jest zalogowany, uruchom przy logowaniu administratora. Akcją powinno być „uruchomienie programu”, a programem jest „C: \ Windows \ System32 \ rundll32.exe” z polem argumentów ustawionym na „user32.dll, LockWorkStation”.

Co się stanie teraz, jeśli ponownie uruchomisz komputer, administrator automatycznie się zaloguje, program, który chcesz uruchomić, zostanie uruchomiony, a stacja robocza zostanie zablokowana. Jeśli zaloguję się za pomocą Podłączania pulpitu zdalnego, zobaczę okno programu i korzystam z GUI. Mogę bez problemu blokować / odblokowywać komputer i dowolnie rozłączać / podłączać ponownie. Nie ma problemu, jeśli pójdę na serwer i zaloguję się na rzeczywistej stacji roboczej. Ponieważ Administrator jest już zalogowany, zadanie nie uruchomi się ponownie (nie tworzy nieskończonej pętli logowania i blokady, z której nie można się wydostać).

Proste. To prawda, że ​​przed automatycznym zalogowaniem komputer ma blokadę na sekundę i wydaje mi się, że pro haker z fizycznym dostępem do komputera może zrobić coś podstępnego w tym oknie czasowym, ale w moim przypadku mogę przeoczyć to ryzyko bezpieczeństwa. Dopóki nie wpuszczę żadnych profesjonalnych hakerów do mojego domu i nie pokażę im komputera, system powinien być względnie bezpieczny. Przede wszystkim nie ma tak dużej wartości na komputerze, który wymaga ochrony super-repozytorium, więc jestem całkiem zadowolony z tego rozwiązania.


7
Bez lekceważenia (lub przegłosowania), Marcus. Ale jeśli to jest naprawdę odpowiedź, której szukasz, to pytanie byłoby bardziej odpowiednie dla SuperUser .
Ryan Bolger

2
Nie było łatwo zdecydować, jaką wymianę stosów opublikować.
Marcus

Cześć Marcus, śledziłem twoją odpowiedź, ale mam problem z uruchomieniem dwóch programów z GUI zamiast jednego. Zadałem pytanie w SuperUser. Jeśli możesz odpowiedzieć na to pytanie, będzie to świetna pomoc - superuser.com/questions/902386/…
user2162550 16.04.15

1
Właściwie to również przegłosowanie, ponieważ NIE jest to odpowiedź na pytanie. Pytanie wyraźnie określa południe, w którym się logujesz - a twoje „rozwiązanie” tutaj powoduje automatyczne logowanie (więc ktoś jest zalogowany). Być może nie jest to mądre pytanie, ale pytanie jest takie, jakie jest.
TomTom

1
@TomTom Jako opcja przedstawiona użytkownikowi końcowemu „Uruchom bez względu na to, czy użytkownik jest zalogowany” może oznaczać „Nie musisz być tutaj, aby opiekować się dzieckiem, aby upewnić się, że się uruchomi”.
Aryeh Leib Taurog

16

Mam program uruchamiany podczas uruchamiania systemu za pomocą Harmonogramu zadań w systemie Windows Server 2012. Program musi zostać uruchomiony, nawet jeśli komputer uruchomi się ponownie automatycznie.

Dlaczego więc nie uczynić go usługą systemową, jak definiują specyfikacje systemu Windows?

Jak mogę to rozwiązać?

Nie możesz. Programy działające w tle nie powinny wchodzić w interakcje z interfejsem użytkownika. Lub: interfejs użytkownika powinien uruchomić własny program, który następnie łączy się z usługą. Interfejs użytkownika działający w przestrzeni użytkownika zalogowanego użytkownika wykonuje prezentację, usługa Windows wykonuje przetwarzanie. W ten sposób model jest zaprojektowany na około 15 lat.

Jestem dość zaskoczony, że Microsoft zezwala na takie ograniczenie w swoim harmonogramie.

Jestem bardziej zaskoczony, że nigdy nie pytałeś dlaczego.

Istnieje wiele problemów:

  • Kto jest zalogowany, gdy zalogowanych jest wiele osób?
  • Kiedy użytkownik się wylogowuje, zabijasz program? AUĆ.
  • Bezpieczeństwo. Program działający w tle może działać z ograniczonymi prawami - ujawnienie interfejsu użytkownika użytkownikowi oznacza, że ​​użytkownik może tam wykonać kod. Model przesyłania wiadomości w systemie Windows jest - ah - pełen problemów.

Nie chcę tworzyć osobnego programu zawierającego tylko GUI, który nawiasem mówiąc, łączy się z oryginalnym programem.

Ani ja, ani Microsoft nie dba w tym momencie o to, co lubisz robić. Istnieje ustalony i obsługiwany model umożliwiający powiązanie przetwarzania w tle z zalogowanym interfejsem użytkownika - użyj go lub nie. Ale kiedy nie, nie narzekaj na zgłaszane problemy bezpieczeństwa.


3
Amen. Chciałbym, aby więcej dostawców aplikacji zrozumiało tę koncepcję.
Ryan Bolger,

15
Wow, czyż nie jesteś mądry w swoim nastawieniu. Cóż, chyba nie mam szczęścia. O ile nie jesteś źle poinformowany i ktoś nie ma sposobu na rozwiązanie tego problemu, wszyscy nie mogą wiedzieć wszystkiego, więc możesz się mylić z absolutną częścią swojego postu „nie możesz”. Chciałbym pozostawić pytanie otwarte na dłużej, na wypadek, gdyby ktoś miał nietypowe obejście. W przeciwnym razie zaakceptuję twoją odpowiedź.
Marcus

Obecnie w obecnych wersjach systemu Windows coraz trudniej jest podać interfejs do usługi, ale nie jest to niemożliwe.
MDMoore313,

Aktywnie nie jest pożądany, głównie ze względów bezpieczeństwa. Głównym problemem tutaj jest to - i naprawdę musisz to zdobyć - jeśli wyświetlisz okno w moim interfejsie użytkownika, mogę wykonać kod w twoim procesie. Mogę następnie wysłać Ci wiadomości systemu Windows, które zawierają mnóstwo rzeczy, które można wykorzystać. Zwykle nie stanowi to problemu - ponieważ jeśli jest to aplikacja użytkownika, mogę robić tylko to, co ja jako użytkownik mógłbym .... ale jeśli usługa ma większe uprawnienia, oto koszmar bezpieczeństwa. Dlatego zostało to zamknięte wiele lat temu i każdy, kto nauczył się programowania i czytał dokumentację, powinien o nim przeczytać
TomTom,

1
Jeśli naprawdę chcesz się tam udać, możesz spróbować wykonać czynności opisane w coretechnologies.com/WindowsServices/FAQ.html#GUIServices - nie jestem pewien, czy nadal działają w bieżących oknach, ale istnieją sposoby, aby uzyskać dostęp do interfejsu użytkownika - i otworzyć wszystkie problemy bezpieczeństwa .
TomTom

0

Chodzi o to Session, w którym program się uruchamia. Jeśli nikt nie jest zalogowany, nie ma interaktywnej sesji do wyświetlenia, myślę, że działa pod Session 0, który ma dziwny interfejs użytkownika, który nie wyświetla się tak jak inne.

Teraz, jeśli Twój program wykryje explorer.exeuruchomienie (lub inny sposób wykrycia loginu użytkownika) i magicznie zmieni się na nowo lub stworzy proces potomny na tym nowym sessionid, każdy, kto się zaloguje, z przyjemnością zobaczy, co robisz.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.