Comment forcer une application WPF à s'exécuter en mode Administrateur
j'ai une application WPF qui accède aux Services windows, programmeurs de tâches sur la machine locale. Lorsque je déploie cette application WPF et que je l'exécute sans "exécuter en tant qu'administrateur" , elle échoue car elle n'est pas capable d'accéder aux Services windows et aux ordonnanceurs de tâches sur la machine locale. Si je l'exécute avec" Run as Administrator", cela fonctionne correctement.
Comment faire fonctionner mon application par défaut en mode administrateur lorsqu'elle est déployée en production?
2 réponses
Vous devez ajouter un app.manifest
. Changer requestedExecutionLevel
à partir de asInvoker
requireAdministrator
. Vous pouvez créer un nouveau manifeste en utilisant la boîte de dialogue Ajouter un fichier, le modifier pour requérir l'administrateur. Assurez-vous que vos paramètres de projet sont définis pour utiliser ce manifeste ainsi. Cela vous permettra tout simplement de double-cliquer l'application et il sera automatiquement invite à l'élévation si elle n'est pas déjà.
voir ici pour plus documentation:
http://msdn.microsoft.com/en-us/library/bb756929.aspx
modifier:
Pour ce que ça vaut, l'article utilise VS 2005 et à l'aide de mt.exe
pour intégrer le manifeste. si vous utilisez Visual studio 2008+, c'est intégré. Ouvrez simplement les propriétés de votre projet, et dans l'onglet "Application" vous pouvez sélectionner le manifeste.
Si vous ne voulez pas cassé la Clickonce ce code est la meilleure solution:
using System.Security.Principal;
using System.Management;
using System.Diagnostics;
using System.Reflection;
//Put this code in the main entry point for the application
// Check if user is NOT admin
if (!IsRunningAsAdministrator())
{
// Setting up start info of the new process of the same application
ProcessStartInfo processStartInfo = new ProcessStartInfo(Assembly.GetEntryAssembly().CodeBase);
// Using operating shell and setting the ProcessStartInfo.Verb to “runas” will let it run as admin
processStartInfo.UseShellExecute = true;
processStartInfo.Verb = "runas";
// Start the application as new process
Process.Start(processStartInfo);
// Shut down the current (old) process
System.Windows.Forms.Application.Exit();
}
}
/// <summary>
/// Function that check's if current user is in Aministrator role
/// </summary>
/// <returns></returns>
public static bool IsRunningAsAdministrator()
{
// Get current Windows user
WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();
// Get current Windows user principal
WindowsPrincipal windowsPrincipal = new WindowsPrincipal(windowsIdentity);
// Return TRUE if user is in role "Administrator"
return windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator);
}