2016-05-02 1 views
3

J'ai une application développée dans vb.net qui nécessite des privilèges d'administrateur. J'ai mis level = "requireAdministrator" dans le manifeste de l'application. Mon client souhaite que cette application soit exécutée par un utilisateur local en raison de certaines restrictions dans son organisation. J'ai donc créé une autre application "Lanceur" qui enregistre réellement les informations d'identification de l'administrateur dans un format crypté et utilise les informations d'identification enregistrées pour exécuter l'application "Original".Erreur de lancement Process.start() lors de la tentative d'exécution en tant qu'administrateur

Tout fonctionne correctement si j'utilise le compte 'Administrateur' (compte intégré). Mais si j'utilise les informations d'identification du compte d'administrateur créé manuellement - la ligne process.start() renvoie une erreur "L'opération demandée nécessite une élévation" Je n'ai vraiment pas pu identifier la différence entre l'administrateur intégré et manuellement compte d'administrateur créé. J'ai confirmé que les utilisateurs (intégrés et créés manuellement) sont membres des administrateurs et des utilisateurs résidentiels. J'ai essayé toutes les possibilités en créant différents utilisateurs avec différents groupes d'utilisateurs et même avec différents systèmes d'exploitation (Windows 7 et Windows 10 - versions 32 et 64 bits) - mais, tous fonctionnent de la même manière qu'expliqué ci-dessus. Y a-t-il quelque chose que je dois changer dans mon code?

 Dim psi As New System.Diagnostics.ProcessStartInfo() 
     psi.FileName = (AppToStart) 
     psi.RedirectStandardError = True 
     psi.RedirectStandardOutput = True 
     psi.CreateNoWindow = True 
     psi.UseShellExecute = False 
     psi.UserName = TbUser.Text 
     psi.Password = ConvertToSecureString(TbPass.Text) 
     psi.Domain = "" 
     Dim p As Process = Process.Start(psi) 

Informations additionnelles: Ici, je suis en cours d'exécution cette application « Launcher » en tant qu'utilisateur standard (non administrateur) et l'application fonctionne bien et il élève vraiment les privilèges si

TbUser.Text = « Administrateur "Et TbPass.Text = 123 (mot de passe administrateur).

Mais cela n'ÉLÉVATEURS privilèges si

TbUser.Text = « AdminUser » (qui est aussi un administrateur appartient au même groupe « Administrateurs ») et TbPass.Text = 321 (mot de passe pour AdminUser).

+2

double possible de [privilèges élévatrices ne fonctionne pas avec UseShellExecute = false] (http://stackoverflow.com/questions/3596259/elevating-privileges-doesnt-travail-avec-useshellexecute-false) – GSerg

Répondre

1

Malheureusement vous ne pouvez pas faire ce et voici pourquoi ...

Fondamentalement verb n'est pas reconnu quand psi.UseShellExecute = False, il aurait besoin d'être psi.UseShellExecute = True. Vous le faites en essayant d'utiliser runas comme une permission élevée.

Dans votre situation, vous n'utiliserez pas le verb = runas, assurez-vous que l'application a déjà été démarrée avec les autorisations appropriées.

S'il vous plaît voir plus here élever les privilèges au sujet, Hans dire est tout Passant mieux ...

+0

@MaliCMT: En plus de cela, vous pouvez créer une application en arrière-plan que vous démarrez avec des privilèges élevés. Votre application de fond à son tour va ensuite commencer le processus que vous voulez avec la sortie redirigée, puis l'application backgound se ferme. Vous devez maintenant trouver le bon processus en récupérant l'ID de l'application en arrière-plan, ou simplement en le recherchant par son nom. –

+0

@zaggler: Vous avez raison. En fait, j'ai mis le .verb = "runas" dans le cadre de tester différentes possibilités et j'ai oublié de le retirer du code lors de la publication. J'ai enlevé la ligne. Merci pour votre avis. Malheureusement votre réponse n'a pas répondu à ma question. J'ai fait ma question un peu plus claire. – MaliCMT