2017-05-01 1 views
-1

Je suis en train de créer un service qui ne suit:Comment lancer l'application sur la non-connecté sur le bureau de l'utilisateur du service sur Windows

  1. Connexion en tant qu'utilisateur avec nom d'utilisateur spécifié/mot de passe
  2. Exécution d'une application sur le bureau de l'utilisateur connecté de l'étape 1

Remarque: avant l'étape 1, l'utilisateur n'est pas connecté. (Quelque chose comme juste après la machine est redémarrée)

Le résultat attendu est, l'utilisateur doit être en mesure de voir l'interface utilisateur de l'application lancée à l'étape 2 si l'utilisateur connecté sur le bureau avec le compte utilisateur connecté à l'étape


J'ai trouvé cet article, mais ce code va lancer l'application sur le bureau actuel (disons, actuellement connecté en tant qu'utilisateur A. En utilisant le nom d'utilisateur/mot de passe de l'utilisateurB, l'application est toujours lancée sur userA desktop, mais en utilisant le compte userB).

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


S'il vous plaît laissez-moi savoir quelle est la bonne façon d'atteindre mon objectif.

IDE: Visual Studio 2015 C++ sous Windows.

+1

si vous connaissez le nom d'utilisateur/mot de passe dans quel problème? appelez 'LogonUser', puis 'CreateProcessAsUser' – RbMm

+0

Il n'y a aucun moyen d'exécuter une application sur un bureau qui n'existe pas encore. Votre service doit attendre que l'utilisateur se connecte, puis lancez l'application. Notez qu'il n'est pas nécessaire que le service connaisse le mot de passe de l'utilisateur. Aussi, dans la plupart des scénarios, un service n'est pas la meilleure façon de le faire de toute façon. –

+0

Cela suppose (incorrectement) qu'il existe exactement un bureau pour un utilisateur. Le problème est que lorsque l'utilisateur se connecte, un nouveau bureau est créé, qui sera le deuxième bureau. Il n'aura pas la fenêtre prévue. – MSalters

Répondre

0

Laissez-moi répondre à ma question.

En bout de ligne:

  • je ne peux pas lancer un processus sur un ordinateur de bureau de non-utilisateur connecté en se connectant par programme dans

Motif:.

  • Appel de certaines fonctions telles que LogOnUser, je peux me connecter et accéder aux ressources liées t o compte de l'utilisateur.
  • Cependant, la session d'ouverture de session est différente d'une session qui sera créée lorsque l'utilisateur ouvre une session à partir de l'écran de connexion.
  • Pour des raisons de sécurité, une fois qu'un processus est lancé, nous ne pouvons pas déplacer le processus vers une autre session. Ainsi, l'interface utilisateur ne sera jamais en mesure d'apparaître sur le bureau après que l'utilisateur se connecte à partir de l'écran de connexion.

solution alternative:

  • Utilisation ouverture de session automatique
  • de l'application de la refonte, et l'interface utilisateur fendu et ses données. Ainsi, un processus avec des données peut s'exécuter en tant que service et l'interface utilisateur peut être lancée ultérieurement sur un bureau.

L'explication des détails de la façon dont session Windows, station de fenêtre et de bureau fonctionne: https://brianbondy.com/blog/100/understanding-windows-at-a-deeper-level-sessions-window-stations-and-desktops

Merci beaucoup pour Harry Johnston pour une explication détaillée dans le commentaire.