web-dev-qa-db-fra.com

"ClickOnce ne prend pas en charge le niveau d'exécution de la requête 'requireAdministrator.'"

J'écrivais donc une application qui nécessite un accès au registre. Je n'avais touché à aucun paramètre de construction, je voulais que tout fonctionne correctement avant d'ajouter les autres touches, telles qu'une description ou un nom.

Tout à coup, je reçois une erreur qui ne va pas disparaître. ClickOnce does not support the request execution level 'requireAdministrator'. Maintenant, je n'avais pas touché ClickOnce dans cette application. Tout ce que j'avais fait était d'inclure un fichier manifeste demandant ces autorisations.

Mon problème maintenant est que cette erreur ne va pas disparaître et je ne peux pas compiler mon programme. Un conseil sur quoi faire? (Note latérale: je suis sur le point d'aller au lit, donc je vérifierai ceci demain après-midi).

86
LMS

Edit: Ce commentaire donne aussi une bonne réponse.

Cliquez une fois pour être activé chaque fois que vous cliquez sur "Publier", que vous le vouliez ou non! Si vous utilisez "requireAdministrator", il apparaît que vous ne pouvez pas utiliser ClickOnce et que vous ne pouvez donc pas "Publier" votre projet.


Original:

Il s'avère que sous l'onglet Sécurité, "Activer les paramètres de sécurité ClickOnce" a été coché. Même si je n'ai pas vérifié. Quoi qu’il en soit, la désactivation qui a empêché ClickOnce de me donner des erreurs. Cela a pris du temps pour trouver ...

139
LMS

Je sais que c'est une vieille question mais je suis venu ici deux ans plus tard alors:

Vous pouvez désactiver ClicKOnce à partir de l'onglet Sécurité des propriétés de projet pour résoudre le problème. voir ci-dessous:

enter image description here

41
t_plusplus

Si vous utilisez l'assistant de publication ou "Publier maintenant", la case à cocher clic-une fois est automatiquement sélectionnée ...

18
Victor Rosu

Je sais que c'est vieux, mais je suis tombé sur lui en cherchant des réponses. Dans mon cas, j'utilise la fonction de publication et je dois continuer à l'utiliser. J'ai aussi besoin d'accéder aux capacités de l'administrateur. Donc, pour cette raison, aucune des réponses ci-dessus n'a fonctionné pour moi.

Au tout début de mon application, j'ai fini par ajouter une méthode qui vérifie si elle est exécutée en tant qu'administrateur et si ce n'est pas le cas, puis relancez-vous en tant qu'administrateur. Pour ce faire, vous devez ajouter les références suivantes.

using System;
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;

Ensuite, vous devrez placer ceci quelque part auquel votre méthode principale a un accès pratique. J'utilise WPF alors je l'ai ajouté à MainWindow.xaml.cs mais vous pouvez l'ajouter n'importe où tôt dans votre code. N'oubliez pas d'ajouter "statique" à ces méthodes si vous en avez besoin.

private void AdminRelauncher()
{
    if (!IsRunAsAdmin())
    {
        ProcessStartInfo proc = new ProcessStartInfo();
        proc.UseShellExecute = true;
        proc.WorkingDirectory = Environment.CurrentDirectory;
        proc.FileName = Assembly.GetEntryAssembly().CodeBase;

        proc.Verb = "runas";

        try
        {
            Process.Start(proc);
            Application.Current.Shutdown();
        }
        catch(Exception ex)
        {
            Console.WriteLine("This program must be run as an administrator! \n\n" + ex.ToString());
        }
    }
}

private bool IsRunAsAdmin()
{
    try
    {
        WindowsIdentity id = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(id);
        return principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    catch (Exception)
    {
        return false;
    }
}

Enfin, au début de votre programme, ajoutez une référence à la méthode. Dans mon cas, je l'ai ajouté à MainWindow, mais l'ajouter à Main fonctionne également.

public MainWindow()
{
    InitializeComponent();
    AdminRelauncher(); //This is the only important line here, add it to a place it gets run early on.
}

J'espère que cela t'aides!

11
Tyler C

Jetez un coup d'oeil dans votre fichier app.Manifest et vous verrez ceci:

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

Il y a des instructions dans les commentaires, mais il suffit de supprimer "requireAdministrator" et de l'insérer à la place pour résoudre le problème:

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

Cette action peut être réalisée en sélectionnant "Activer les paramètres de sécurité ClickOnce" (car elle ne peut pas être "décochée" lors d'une publication, comme indiqué), puis en sélectionnant "Ceci est une application de confiance partielle". "Intranet local" sera automatiquement sélectionné dans le menu déroulant, ce qui convient parfaitement.

Enregistrez vos modifications, publiez l'application, done-skis. : -) Security Settings Snippet

3
CodeBreaker

J'ai le même problème que je résous en décochant la case "Activer les paramètres de sécurité ClickOnce" Pour rechercher cette option dans Visual Studio Cliquez à droite sur votre Projet ==> Propriétés ==> Sélectionner la sécurité ==> Activer les paramètres de sécurité ClickOnce (Cette option a déjà été cochée, je l'ai donc décochée et mon problème a été résolu).

2
Cool7

Voici l'extrait de code pour VB.NET

If Not New WindowsPrincipal(WindowsIdentity.GetCurrent).IsInRole(WindowsBuiltInRole.Administrator) Then
            Process.Start(New ProcessStartInfo With { _
                                                     .UseShellExecute = True, _
                                                     .WorkingDirectory = Environment.CurrentDirectory, _
                                                     .FileName = Assembly.GetEntryAssembly.CodeBase, _
                                                     .Verb = "runas"})

EDIT: Mais si vous déployez de cette manière, certains logiciels AV bloquent votre code.

2
Tzwenni