L'exécution d'un nouveau processus en tant qu'utilisateur différent dans vb.net
Je suis actuellement en utilisant un homegrown méthode pour exécuter un processus à un autre utilisateur dans Vista, et je ne peux pas échapper au sentiment que c'hack-ish et le moins que l'idéal (en plus du fait qu'il craps contrôle de compte d'utilisateur, plantage de mon appli avec une exception de sécurité, et en me forçant à désactiver l'UAC au total). Mon processus se compose de deux projets (donc deux fichiers EXE) - une "interface" et un "lancement stub" - et voici le processus:
- Utilisateur dispose d'un raccourci qui lance "Interface.exe notepad.exe"
- Interface.exe a un formulaire qui demande les informations d'identification à utiliser
- Interace.exe utilise ProcessStartInfo pour créer une instance de LaunchStub.exe (LS) en tant que nouvel utilisateur
- LS utilise ProcessStartInfo (avec ShellExecute true) pour lancer le fichier demandé, et depuis il est déjà en cours d'exécution dans la demande de l'utilisateur, ainsi que le nouveau processus.
La raison pour laquelle j'ai un processus en deux étapes est que je veux que les utilisateurs soient en mesure de faire un clic droit sur n'importe quel fichier du système d'exploitation possède une action par défaut pour les (.EXE, .SQL, .MSC, etc) et de le lancer, et ProcessStartInfo ne supporte qu'avec "UseShellExecute" est activée, mais que le commutateur m'empêche de l'utilisation de nouvelles informations d'identification, donc je ne peut faire qu'une à la fois.
Cela provoque quelques problèmes - tout d'abord, l'utilisateur doit déjà exister sur l'ordinateur, ce qui signifie qu'ils ont à être connecté en local avant. Si il n'y a pas de profil de l'utilisateur, l'application est parfois lancer, mais je reçois de registre et les exceptions de profil, car l'application s'attend que les choses existent qui ne sont pas encore (comme un HKCU de la ruche dans le registre, que l'utilisateur n'a pas de raison qu'ils n'ont jamais connecté).
Je sais que je devrais être en mesure de simplement "Élever" les droits de ma demande à l'utilisateur qu'ils sont la demande, à lancer mon nouveau processus, puis d'annuler l'élévation, mais je ne suis pas en mesure de trouver un bon exemple de code pour ça, et je ne suis pas sûr qu'il serait de permettre l'exécution d'un programme complètement différent de l'utilisateur. Tout cela est-il un sens? J'ai juste ne peut pas aider à se sentir comme il ya une meilleure façon de le faire.
Mise à JOUR: j'ai juste essayé de certains d'emprunt d'identité de code j'ai trouvé en ligne, mais en vain. Lorsqu'il est utilisé conjointement avec ProcessStartInfo, il semble toujours de lancer des processus en utilisant ma connexion actuelle, et non pas celui que j'ai fourni, même si j'ai activé l'usurpation d'identité en utilisant les informations d'identification fournies.
OriginalL'auteur SqlRyan | 2009-01-26
Vous devez vous connecter pour publier un commentaire.
Les Chances sont que vous devez créer votre propre "coquille" de la fonction à l'aide de l'API Win32.
À l'aide de la CreateProcessWithLogonW API, vous pouvez créer de nouveaux processus dans différents pouvoirs et éventuellement de charger le profil utilisateur de l'information.
Dans l'extrait de code ci-dessous si vous remplacez
Consultez la documentation du CreateProcessWithLogonW API pour de plus amples détails. Aller dans cette voie, vous avez le plein contrôle et la pleine responsabilité pour le lancement de l'application.
De nouveau c'est juste un exemple et vous pouvez jouer avec un peu de lui faire faire ce que vous voulez.
et il l'a fait travailler avec l'UAC activé ??
OriginalL'auteur user50612
Vous pouvez essayer de courir runas à partir de votre application. Quelques exemples et options de ici.
OriginalL'auteur Sunny Milenov
Essayer ce Module:
Utilisation Runprogram() Pour démarrer votre Programme avec l'utilisateur/pw y comme. Programm signifie l' .exe seulement, les paramètres ar écrit en "ligne de commande"
oui, c'est très similaire, de son seulement une seconde de la fonction écrite arrondi de la apifunktion CreateProcessWithLogonW API - ready_to_use avec errorhandling et successfeedback ...
OriginalL'auteur DrFuture
Si vous voulez démarrer une application avec les informations d'identification différentes que le processus en cours d'exécution, vous pouvez utiliser le .Net Processus classe.
OriginalL'auteur zlsmith86