2008-09-18 6 views
3

Je travaille sur une petite application dans VB.NET. Le programme a besoin du privilège d'administrateur pour effectuer certaines tâches. Est-il possible de demander des privilèges d'administrateur lors de l'exécution si le programme?Comment un programme demande-t-il des privilèges d'administrateur?

Quelle est la manière générale de changer le compte d'utilisateur sous lequel l'application s'exécute?

+2

Apparaît que vous avez posté la même question deux fois: http://stackoverflow.com/questions/90674/how-does-a-program-ask-for-administrator-privileges –

Répondre

3

Il existe plusieurs méthodes selon vos besoins. Certains détails sont donnés au the application developer requirements for UAC.

  1. Inclure un manifeste qui cause votre UAC programme d'exiger des privilèges d'administrateur au démarrage.
  2. Utilisez l'une des méthodes suggérées pour appeler une élévation à court de processus. L'un des plus beaux consiste à utiliser the COM elevation moniker et CoCreateInstanceAsAdmin pour appeler des méthodes sur un objet COM s'exécutant en tant qu'administrateur. C'est peut-être difficile de travailler dans VB.Net. Je l'ai eu fonctionne bien en C++ si
  3. Une autre bonne méthode consiste à isoler les parties de votre code qui ont besoin de privilèges admin dans une application qui utilise un manifeste UAC pour exiger des privilèges admin. Votre application principale n'a pas besoin d'être exécutée en tant qu'administrateur dans ce cas. Lorsque vous avez besoin d'admin privilegese, vous appelez l'application externe.
+0

J'ai utilisé la méthode 3, mais seulement fonctionne sur Win7, il ne fonctionne pas sur Vista, à la place, en me donnant "System.ComponentModel.Win32Exception (0x80004005) l'opération demandée nécessite une élévation" –

+0

Je suis assez sûr que Windows ne vous permettra pas non plus de rediriger l'entrée/sortie standard/erreur sur la frontière de sécurité admin/non-admin. Vous devrez trouver une manière différente d'obtenir la sortie du programme en cours d'exécution en tant qu'administrateur - Référence: http://stackoverflow.com/a/8690661 – Kiquenet

+0

@Kiquenet oui vous avez probablement raison, vous communiquez normalement en utilisant COM dans ce cas par la méthode 2 si vous aviez besoin de ce type de communication, mais il y a beaucoup d'autres façons de servir –

1
Try 
        Dim procInfo As New ProcessStartInfo() 
        procInfo.UseShellExecute = True 
        procInfo.FileName = 'Filename here 
        procInfo.WorkingDirectory = "" 
        procInfo.Verb = "runas" 
        Process.Start(procInfo) 
       Catch ex As Exception 
        MsgBox(ex.Message.ToString(), vbCritical) 
       End Try 
      End If 
0

La façon la plus facile de le faire est de cliquer sur l'onglet Projet -> Ajouter un formulaire Windows -> fichier .XML -> nommez (nom du programme) .manifest -> coller ce code dans cette link dedans (merci JDOConal) -> puis faites un clic droit sur le nom de votre projet dans la boîte de l'explorateur de solution à droite et cliquez sur propriétés -> sur le premier onglet sélectionnez manifeste puis le fichier .manifest que vous avez créé -> build = done!

Questions connexes