W starszych wersjach systemu Windows przed Vista można mieć usługę systemu Windows współdziałać z bieżącym zalogowanym użytkownikiem pulpitu, aby ułatwić wyświetlanie informacji na ekranie z usługi. W systemie Windows Vista dodano 0 sesji dla bezpieczeństwa w celu odizolowania usług od komputera. Jaki jest łatwy sposób komunikacji między usługą a aplikacją działającą poza sesją 0? Do tej pory doszedłem do tego, używając TCP/IP do komunikacji między dwoma, ale wydaje się, że jest to rodzaj niechlujnego sposobu, aby to zrobić.Jak komunikować się między sesją Windows Vista Session 0 a pulpitem?
Odpowiedz
Możesz używać pamięci współdzielonej lub nazwanej potoku, aby ułatwić także IPC. Koncepcyjnie jest to podobne do protokołu TCP/IP, ale nie musisz się martwić o znalezienie nieużywanego portu.
Musisz upewnić się, że utworzone obiekty nazwane są poprzedzone "Global \", aby umożliwić im dostęp do wszystkich sesji zgodnie z opisem here.
AFAIK nie ma możliwości, aby usługa bezpośrednio współpracowała z pulpitem.
Rzeczywiście, ze względów bezpieczeństwa nie można już komunikować się bezpośrednio z "pulpitem". Czym właściwie jest "komputer", kiedy mieszkasz w maszynie z wieloma aktywnymi użytkownikami + sesjami zdalnymi?
Ogólnym sposobem rozwiązania problemu jest korzystanie z aplikacji serwisowych, które komunikują się za pośrednictwem niektórych mechanizmów RPC (TCP/IP, IPC, .Net Remoting Channels na jednym z nich itp.). To rodzaj bólu, ale myślę, że korzyści są warte zmian.
Aby usługa mogła komunikować się z komputerem stacjonarnym, utknąłeś w jednym z mechanizmów RPC. Mechanizm zdalnego dostępu .NET (IpcServerChannel) nie jest trudny do wdrożenia w tym celu.
Również z aplikacją .NET aplikacja komputerowa może wysyłać wiadomości bezpośrednio do usługi za pomocą ServiceController.ExecuteCommand. Te polecenia są odbierane przez usługę za pośrednictwem ServiceBase.OnCustomCommand. Jest to jeszcze łatwiejsze i wszystko, czego potrzebujesz, jeśli kontrolowanie usługi jest Twoim jedynym wymaganiem.
- 1. Jak przełączyć proces między domyślnym pulpitem a pulpitem Winlogon?
- 2. Jak komunikować się między usługami systemu Windows
- 3. Różnica między sesją hibernacji a EntityManager
- 4. Jak komunikować się między C++ i PHP w systemie Windows?
- 5. Jak komunikować się między zadaniami Rake?
- 6. Jaka jest różnica między [0] a & a [0] w łańcuchu
- 7. Jak komunikować się między dwoma dziećmi Fragmenty wewnątrz zagnieżdżonego fragmentu
- 8. Jak komunikować się między 2 kartami/oknami przeglądarki?
- 9. Jak komunikować się między kontekstami w behat 3?
- 10. Jaka jest różnica między sesją a plikiem cookie?
- 11. jak komunikować się między Matlabem a Power Pointem lub Matlabem i czytnikiem akrobatów
- 12. Jak komunikować się między usługą przesyłania wiadomości Firebase a działaniem? Android
- 13. jak komunikować się między stroną opcji a stroną w tle rozszerzenia chrome
- 14. Uzyskaj zalogowaną nazwę użytkownika systemu Windows skojarzoną z pulpitem
- 15. Normalizowanie CGRect między 0 a 1
- 16. Normalizacja między 0 a 1 ignorując NaN
- 17. Yii zarządzania sesją
- 18. Windows Mobile (C#) - komunikacja między telefonem a komputerem
- 19. translate3d między 0% a ujemną% w IE10
- 20. C++ różnica między 0 a 0.0
- 21. Jaka jest różnica między {0} a ""?
- 22. Jak komunikować się z modemem USB 3G?
- 23. kątowe JS - komunikować się między usługami non-dependend
- 24. Różnica między Session i HttpContext.Current.Session
- 25. Jak utworzyć zakres losowych liczb dziesiętnych między 0 a 1
- 26. Jak zarządza sesją w trybie hibernacji?
- 27. Jak komunikować się z urządzeniem USB?
- 28. Spotify zarządzania sesją
- 29. Uzyskiwanie trybu dzwonka 0 w C++ (Windows)
- 30. Rozgłaszanie grupowe UDP przy użyciu winsock Różnice API między XP a Vista