2010-10-04 24 views
3

J'ai tenté d'exécuter des tâches Win32 dans C# 3.5 pour obtenir des droits utilisateur élevés pour une application de console. Je développe sur Visual Studio 2008 SP1/GDR et les choses fonctionnent bien lorsqu'il est exécuté sous le débogueur. Les choses fonctionnent aussi bien lorsque je lance l'application de console autonome. Les choses fonctionnent également bien quand je place tout dans un MSI et l'installe sur un serveur 2003 et exécute l'application de la console.Serveur 2008 impossible de définir les droits utilisateur

Si je prends le même MSI et l'installer sur un serveur 2008 avec l'UAC activé, puis exécutez l'application de la console, je reçois des messages comme ceci:

Unable to set right for the account "DOMAIN\QAUSER": SeCreateGlobalPrivilege 
System.UnauthorizedAccessException Attempted to perform an unauthorized operation. 

Je ne peux pas attendre mon déploiement/admins de serveur à faire quoi que ce soit avec mon application autre que l'installer, et ils ne vont pas désactiver l'UAC. Il doit y avoir un moyen programmatique pour définir correctement les droits d'utilisateur que je peux ajouter à l'application de la console - quelqu'un sait comment?

Merci.

Répondre

1

Vous utilisez probablement "Global\" prefix au nom de l'objet dans votre application et votre application sera lancée dans une session du serveur hôte de session Bureau à distance (hôte de session RD). Dans le cas où votre programme doivent permettre SE_CREATE_GLOBAL_NAME (SeCreateGlobalPrivilege) privilège. voir C# – How to enable SeDebugPrivilege? (mais utiliser SE_CREATE_GLOBAL_NAME au lieu de SE_DEBUG_NAME) ou Manipulate Privileges in Managed Code Reliably, Securely, and Efficiently à titre d'exemple.

0

Je suppose que UAC est activé sur la machine 2008 et je ne peux pas encore commenter sur votre question pour le savoir.

Si oui, assurez-vous que dans votre fichier app.manifest dans VS (sous propriétés), changer

<requestedExecutionLevel level="asInvoker" uiAccess="false" /> 

à

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

Même si le code est en cours d'exécution en tant qu'administrateur, vous avez pour obtenir par l'avertissement UAC.

+0

Comment le réglage VS influent sur ce que mon application déployée fait? Je pense qu'il devrait y avoir quelque chose que je peux mettre à faire programatically ce qui pourrait aller dans un VS – Snowy

+0

Je doute que votre application après le déploiement sera en mesure de changer la façon dont son exécution.Si tel est le cas, tout malveillant L'application pourrait se mettre en place et nous serions de retour aux jours de l'ouest sauvage de XP. Le paramètre VS fait partie du processus UAC et détermine au moment de la création les autorisations dont une application a besoin. Il doit encore être exécuté (je pense) en tant qu'administrateur et après le changement de réglage, vous verrez que l'icône a le bouclier de l'UAC dessus. – darkstar3d