c ++ - Sådan lanceres applikation på ikke-logget brugerens skrivebord fra service på Windows

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at skabe en tjeneste, der følger:



  1. Log ind som bruger med angivet brugernavn/kodeord

  2. At køre et program på skrivebordet for den logget bruger af trin 1



Bemærk: før trin 1 er brugeren ikke logget på. (noget lige efter maskinen genstartes)


Det forventede resultat er, at brugeren skal kunne se brugergrænsefladen for lanceret app i trin 2, hvis bruger logget på skrivebordet med brugerkontoen logget på trin





Jeg fandt denne artikel, men denne kode lancerer appen på det nuværende skrivebord (lad os sige, for øjeblikket logget på som bruger.A. Ved brug af brugernavn/adgangskode til brugerB bliver appen stadig lanceret på userA desktop, men ved brug af userB 's konto ).


https://support.microsoft.com/en-ca/help/165194/createprocessasuser-windowstations-and-desktops[1]





Lad mig vide, hvad der er den rigtige måde at nå mit mål på.


IDE: Visual Studio 2015 C ++ på Windows.

Bedste reference


Lad mig svare på mit spørgsmål.


Den nederste linje er:



  • Jeg kan ikke starte en proces på en desktop af ikke-logget bruger ved at logge ind programmelt.



Årsag:



  • Opkald til en bestemt funktion som LogOnUser, jeg kan logge ind og få adgang til ressourcer relateret til brugerens konto.

  • Logon-sessionen er imidlertid forskellig fra en session, der oprettes, når bruger logger på fra login-skærmen.

  • På grund af sikkerhedsårsagen, når en proces er lanceret, kan vi ikke flytte processen til en anden session. Så brugergrænsefladen vil aldrig kunne vise på skrivebordet, efter at brugeren logger på fra loginskærmen.



Alternativ løsning:



  • Brug automatisk logon

  • Redesign app og split brugergrænsefladen og dens data. Så en proces med data kan køre som service, og brugergrænsefladen kan starte senere på et skrivebord.



Nærmere oplysninger om, hvordan Windows Session, Window Station og Desktop fungerer:
https://brianbondy.com/blog/100/understanding-windows-at-a-deeper-level-sessions-window-stations-and-desktops[2]


Mange tak for Harry Johnston for detaljeret forklaring i kommentaren.