none
Impossible de publier une application qui demande une élévation de privilèges. RRS feed

  • Question

  • Bonjour, je développe actuellement une application qui a besoin d'accéder a la base de registre. Et pour ce faire, l'utilisateur a besoin d'avoir les privilèges necessaires.

    Donc j'arrive via le manifest de mon application a faire apparaitre l'UAC qui demande les droits d'administrateur en lançant mon application par le .exe. Mais si je veut publier mon application, j'ai le droit a l'erreur suivante : "Erreur    7    ClickOnce ne prend pas en charge le niveau d'exécution de la demande 'requireAdministrator'."

    A priori impossible de faire les choses dans ce sens la.

    Et du coup, comment il serait possible de récupérer les privilèges nécessaires ?

    merci d'avance.

    samedi 11 décembre 2010 22:07

Réponses

  • Bonjour,

    ClickOnce est conçu pour s'exécuter avec les droits utilisateurs courant AsInvoker (http://msdn.microsoft.com/en-us/library/6ad1fshk.aspx).

    Bonjour, je développe actuellement une application qui a besoin d'accéder a la base de registre. Et pour ce faire, l'utilisateur a besoin d'avoir les privilèges necessaires.
    Prenons le problème en amont, pourquoi votre application a besoin d'accéder à la base de registre ? Dans quelle classe plus précisement ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    dimanche 12 décembre 2010 08:36
    Modérateur
  • Bonjour,

    N'ouvrez pas les clés en écriture (en spécifiant le second paramètre "True" dans OpenSubKey()), cela nécessitera forcement des droits administrateurs pour la clé HKLM.

    Remplacez donc cette ligne :

    RegK = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
    

    Ainsi votre application ne nécessite pas les droits administrateurs et fait parti d'une minorité de vrai applications professionnels qui seront compatibles sans aucun problème sous Windows Vista / Seven.

    Au passage, vous pouvez spécifier directement l'aborescence complète de la clé à ouvrir (cela évite de faire des OpenSubKey() en cascade...).

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    dimanche 12 décembre 2010 14:19
    Modérateur

Toutes les réponses

  • Bonjour,

    ClickOnce est conçu pour s'exécuter avec les droits utilisateurs courant AsInvoker (http://msdn.microsoft.com/en-us/library/6ad1fshk.aspx).

    Bonjour, je développe actuellement une application qui a besoin d'accéder a la base de registre. Et pour ce faire, l'utilisateur a besoin d'avoir les privilèges necessaires.
    Prenons le problème en amont, pourquoi votre application a besoin d'accéder à la base de registre ? Dans quelle classe plus précisement ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    dimanche 12 décembre 2010 08:36
    Modérateur
  • Bonjour,

    merci de votre réponse.

    Mon application se sert du registre pour récupérer la liste des logiciels sur la machine hôte, J'ai essayé avec le WMI, mais il ne me renvoi que les logiciels installés "proprement" (désolé je ne trouve plus mes mots). Par exemple, la récupération avec WMI ne me renvoi même pas que firefox est installé.

    Je passe donc par le registre : HKLM / SOFTWARE / MICROSOFT / WINDOWS / CURRENT VERSION / UNINSTALL.

    Je récupère donc ainsi tout les logiciels installés sur la machine, leur version et uninstall string.

    Il ne serait pas possible de donner les droits a ce programme ?, c'est a dire demander les droits d'administrateur, UAC puis de changer une valeur dans le registre qui permettrais de donner les droits a cette application ?

    Je ne sais pas vraiment si cela existe mais qui ne tente rien n'a rien.

     

    Si vous avez une solution je suis preneur !

    cordialement

    dimanche 12 décembre 2010 13:31
  • Bonjour,

    Pouvez-vous nous montrer le code qui fait la lecture dans la base de registre, car la consultation en lecture de cette clé est autorisé pour les non-administrateurs (et donc ne nécessite pas une élévation des privilèges...).

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    dimanche 12 décembre 2010 13:49
    Modérateur
  • Voila ma fonction : 
    Public Shared Function RechercheLogiciel()
        'Variables
        Dim name As String
        Dim version As String
        Dim rendu As String
        Dim uninstallStr As String
        Dim file_path As String = Form1.GetAppData() + "\SoftsReg.txt"
    
        Try
          FileOpen(2, file_path, OpenMode.Output)
          '------recup les log installés------'
          Dim RegK As RegistryKey
          RegK = Registry.LocalMachine.OpenSubKey("SOFTWARE", True).OpenSubKey("Microsoft", True).OpenSubKey("Windows", True).OpenSubKey("CurrentVersion", True).OpenSubKey("Uninstall", True)
          Dim Tabsscle(RegK.SubKeyCount) As String
          Tabsscle = RegK.GetSubKeyNames
          '------Lecture du tableau des clé (tabsscle) defini plus haut------'
          Dim j As Integer
          ' ListBox1.Items.Clear() 'vide la zone de liste
          For j = 0 To UBound(Tabsscle) 'parcour du tableau de l'element 0 jusqu'a la fin
            'lecure de la clé J contenu dans le tableau tabsscle()
            Dim regSK As RegistryKey
            regSK = RegK.OpenSubKey(Tabsscle(j))
            Dim TabValeur(regSK.ValueCount) As String
    
            '----Lecture des valeurs de la sous clé-----'
            TabValeur = regSK.GetValueNames
            'si il y a des valeur dans la clé en cours
            If regSK.ValueCount <> 0 Then
              'on récupère la value DisplayName de la sous clé
              name = ("Name='" + regSK.GetValue("DisplayName") + "'")
              uninstallStr = ("UninstallString='" + regSK.GetValue("UninstallString") + "/SILENT" + "'")
              version = ("Version='Pas de Version'")
              'on parcours le tableau des valeurs
              For k = 0 To UBound(TabValeur)
                'si notre valeur = displayVersion alors 
                If TabValeur(k) = "DisplayVersion" Then
                  version = ("Version='" + regSK.GetValue(TabValeur(k)) + "'")
                End If
              Next k
              version = version '& vbCrLf
              rendu = name + "," + version + "," + uninstallStr + Chr(13) + Chr(10)
              Print(2, rendu)
            End If
            'ferme le registre sous clé
            regSK.Close()
          Next j
          'ferme le registre cle
          RegK.Close()
        Finally
          FileClose(2)
        End Try
      End Function
    
    ps : je débute :)
    dimanche 12 décembre 2010 14:09
  • Bonjour,

    N'ouvrez pas les clés en écriture (en spécifiant le second paramètre "True" dans OpenSubKey()), cela nécessitera forcement des droits administrateurs pour la clé HKLM.

    Remplacez donc cette ligne :

    RegK = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
    

    Ainsi votre application ne nécessite pas les droits administrateurs et fait parti d'une minorité de vrai applications professionnels qui seront compatibles sans aucun problème sous Windows Vista / Seven.

    Au passage, vous pouvez spécifier directement l'aborescence complète de la clé à ouvrir (cela évite de faire des OpenSubKey() en cascade...).

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    dimanche 12 décembre 2010 14:19
    Modérateur
  • Parfait, plus besoin de privilèges.

    Merci beaucoup pour votre rapidité et votre efficacité !

    Au revoir

    dimanche 12 décembre 2010 14:25