Megosztás a következőn keresztül:


Interaktív szolgáltatások

A szolgáltatások általában olyan konzolalkalmazások, amelyek grafikus felhasználói felület (GUI) nélkül felügyelet nélkül futtathatók. Egyes szolgáltatások azonban esetenként interakciót igényelhetnek egy felhasználóval. Ez az oldal a szolgáltatás felhasználójával való interakció legjobb módjait ismerteti.

Fontos

A szolgáltatások nem kommunikálhatnak közvetlenül a felhasználóval a Windows Vista rendszerből. Ezért az Interaktív szolgáltatás használata című szakaszban említett technikák nem használhatók új kódban.

 

Felhasználóval való kommunikáció közvetett módon egy szolgáltatásból

A következő technikákkal kommunikálhat a felhasználóval egy szolgáltatásból a Windows összes támogatott verzióján:

  • Párbeszédpanel megjelenítése a felhasználói munkamenetben a WTSendMessage függvény használatával.

  • Hozzon létre egy különálló rejtett grafikus felhasználói felületi alkalmazást, és használja a CreateProcessAsUser függvényt az alkalmazás interaktív felhasználó környezetében való futtatásához. A GUI-alkalmazást úgy tervezheti meg, hogy a szolgáltatással valamilyen folyamatközi kommunikáció (IPC) útján kommunikáljon, például elnevezett csöveken keresztül. A szolgáltatás kommunikál a GUI-alkalmazással, hogy megmondja, mikor jelenjen meg a grafikus felhasználói felület. Az alkalmazás visszaküldi a szolgáltatásnak a felhasználói interakció eredményeit, hogy a szolgáltatás végrehajthassa a megfelelő műveletet. Vegye figyelembe, hogy az IPC csak akkor teszi elérhetővé a szolgáltatásillesztőket a hálózaton keresztül, ha nem használ megfelelő hozzáférés-vezérlési listát (ACL).

    Ha ez a szolgáltatás többfelhasználós rendszeren fut, adja hozzá az alkalmazást a következő kulcshoz, hogy az minden munkamenetben fusson: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run. Ha az alkalmazás nevesített csöveket használ az IPC-hez, a kiszolgáló a munkamenet-azonosító alapján egyedi nevet adhat az egyes csöveknek több felhasználói folyamat között.

A következő technika Windows Server 2003 és Windows XP rendszereken is elérhető:

  • Üzenetmező megjelenítése a MessageBox függvény meghívásával MB_SERVICE_NOTIFICATION. Ez egyszerű állapotüzenetek megjelenítéséhez ajánlott. Ne hívja meg MessageBox szolgáltatás inicializálása során vagy a HandlerEx rutinból, kivéve, ha külön szálról hívja, hogy időben visszatérjen az SCM-hez.

Interaktív szolgáltatás használata

Alapértelmezés szerint a szolgáltatások neminteraktív ablakállomást használnak, és nem tudnak kommunikálni a felhasználóval. Egy interaktív szolgáltatás azonban megjeleníthet egy felhasználói felületet, és felhasználói bemenetet fogadhat.

Figyelmeztet

Az emelt szintű biztonsági környezetben (például a LocalSystem-fiókban) futó szolgáltatások nem hozhatnak létre ablakot az interaktív asztalon, mert az interaktív asztalon futó egyéb alkalmazások is használhatják ezt az ablakot. Ez elérhetővé teszi a szolgáltatást minden olyan alkalmazásnak, amelyet egy bejelentkezett felhasználó hajt végre. Emellett a LocalSystem néven futó szolgáltatások nem férhetnek hozzá az interaktív asztalhoz az OpenWindowStation vagy GetThreadDesktop függvény meghívásával.

 

Interaktív szolgáltatás létrehozásához tegye a következőket a CreateService függvény meghívásakor:

  1. Adja meg a NULL értéket az lpServiceStartName paraméterhez a szolgáltatás futtatásához a LocalSystem-fiókkontextusában.
  2. Adja meg a SERVICE_INTERACTIVE_PROCESS jelzőt.

Annak megállapításához, hogy egy szolgáltatás interaktív szolgáltatásként fut-e, hívja meg a GetProcessWindowStation függvényt, hogy lekérjen egy leírót az ablakállomáshoz, és a GetUserObjectInformation függvényt annak ellenőrzéséhez, hogy az ablakállomás rendelkezik-e a WSF_VISIBLE attribútummal.

Vegye figyelembe azonban, hogy a következő beállításkulcs olyan értéket tartalmaz, NoInteractiveServices, amely szabályozza a SERVICE_INTERACTIVE_PROCESS hatását:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows

A NoInteractiveServices értéke alapértelmezés szerint 1, ami azt jelenti, hogy egyetlen szolgáltatás sem futtatható interaktívan, függetlenül attól, hogy rendelkezik-e SERVICE_INTERACTIVE_PROCESS. Ha NoInteractiveServices értéke 0, a SERVICE_INTERACTIVE_PROCESS rendelkező szolgáltatások interaktívan futtathatók.

Windows 7, Windows Server 2008 R2, Windows XP és Windows Server 2003: A NoInteractiveServices értéke alapértelmezés szerint 0, ami azt jelenti, hogy a SERVICE_INTERACTIVE_PROCESS rendelkező szolgáltatások interaktívan futtathatók. Ha NoInteractiveServices értékre van állítva, az azt követően indított szolgáltatások nem futtathatók interaktívan, függetlenül attól, hogy SERVICE_INTERACTIVE_PROCESS.

Fontos

Minden szolgáltatás a Terminálszolgáltatások 0. munkamenetében fut. Ezért ha egy interaktív szolgáltatás megjelenít egy felhasználói felületet, az csak a 0. munkamenethez csatlakozó felhasználó számára látható. Mivel nem garantálható, hogy az interaktív felhasználó csatlakozik a 0. munkamenethez, ne konfiguráljon egy szolgáltatást úgy, hogy interaktív szolgáltatásként fusson a Terminálszolgáltatások alatt, vagy olyan rendszeren, amely támogatja a gyors felhasználói váltást (a gyors felhasználói váltás a Terminálszolgáltatások használatával történik).