Question

J'ai un programme qui doit fonctionner en tant qu'utilisateur normal la plupart du temps, mais de temps en temps, j'ai besoin d'arrêter et de démarrer un service. Comment puis-je créer un programme qui fonctionne la plupart du temps en tant qu’utilisateur normal, mais passe en mode administrateur pour certaines fonctions?

Était-ce utile?

La solution

Pour autant que je sache, vous devez démarrer un processus séparé qui s'exécute en tant qu'administrateur. Vous ne pouvez pas élever un processus une fois qu'il a déjà été démarré.

Voir cette question .

Autres conseils

Vous ne pouvez pas élever un processus une fois qu'il est en cours d'exécution, mais vous pouvez aussi: -

Redémarrez le processus en mode élevé

private void elevateCurrentProcess()
{
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.UseShellExecute = true;
    startInfo.WorkingDirectory = Environment.CurrentDirectory;       
    startInfo.FileName = Application.ExecutablePath;
    startInfo.Verb = "runas";

    try
    {
        Process p = Process.Start(startInfo);
    }
    catch
    {
        // User didn't allow UAC
        return;
    }
    Application.Exit();
}

Cette méthode signifie que votre processus continue de s'exécuter avec un rendement élevé et qu'il n'y a plus de promesses de contrôle de compte d'utilisateur - une bonne et une mauvaise chose, dépend de votre public.

Mettez le code qui nécessite une élévation dans un exe séparé

Définissez le manifeste en tant que requireAdministrator et démarrez-le en tant que processus séparé. Voir ce exemple de code .

Cette méthode signifie une invite UAC chaque fois que vous exécutez l'opération.

La meilleure méthode dépend de votre public (types d’administrateur ou non) et de la fréquence de l’opération élevée.

Vous devez utiliser ce que l'on appelle l'emprunt d'identité.

[

scroll top