IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Probleme recuperation valeur et modification valeur registre


Sujet :

VB.NET

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut Probleme recuperation valeur et modification valeur registre
    Bonjour,

    Excusez moi, j'ai un problème avec une fonction que j'ai créé pour lire dans ma base de registre. Voila la fonction en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
        Public Function getEssbaseActivate() As String
            Dim Reg As RegistryKey
            Dim tmp As String = "toto"
            EcrireLog("valeurAvant", tmp)
            'Ouvre l'instance de la clé du produit
            Reg = Registry.CurrentUser.OpenSubKey("EssSwitch")
            'Recupere la valeur
            tmp = Reg.GetValue("essbase")
            EcrireLog("valeurapres", tmp)
            'ferme la cle
            Reg.Close()
            Return tmp
        End Function
    #End Region
    Mon problème est que dans mon ficchier log je récupère bien la valeur avant mais pas celle après. Donc j'ai ma fonction qui bloque entre les deux. Si vous pouviez m'aider ou me mettre sur une piste, ce serait sympa.

    Merci d'avance.

    Vinou

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Tu as essayé de mettre un point d'arrêt dans la fonction et de l'exécuter pas à pas pour voir ce qui se passe ?

  3. #3
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut
    Bah c'ests un windows service mais bon peut etre qu'en recuperant une exception (s'il y en a une) dans un fichier log avec un try catch ou en creant une application effectuant la meme operation. Bref j'essaye ce soir et je te tien au courant en rentrant. Merci du conseil bonne journee

  4. #4
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut
    Re coucou
    Alors j'ai mis un try catch au niveau de la fonction de récupération de la valeur dans la base de registre et j'obtiens l'erreur suivante :
    "La référence d'objet n'est pas définie à une instance d'un objet"
    Snif des idées ?

    En fait, je l'appelle au moment ou le windows service reçoit l information que l'utilisateur a cliqué sur un bouton dans l'application. Si je met pas la fonction et que je met une valeur o pif et que je la renvoie a l application, je la récupère bien. En gros, cela vient de la fonction de récuperation de la valeur dans le registre.

    Je vous remercie d'avance pour votre aide .

  5. #5
    Membre habitué Avatar de benito9253
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 205
    Points : 196
    Points
    196
    Par défaut
    Salut,

    Essaye comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                Dim key1 As Microsoft.Win32.RegistryKey
                key1 = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("EssSwitch")
                tmp = key1.GetValue("essbase", "Erreur")
                EcrireLog("valeurapres", tmp)

  6. #6
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut
    Eh nan snif, ca ne marche pas. Toujours la même erreur ... Merci en tout cas de ta proposition

  7. #7
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 690
    Points : 1 960
    Points
    1 960
    Par défaut
    Sur quelle ligne de code tu as l'erreur ?

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    je suppose que l'erreur est sur cette ligne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Reg.GetValue("essbase")
    Dans ce cas ça veut dire que la clé EssSwitch n'existe pas... tu es sûr que c'est directement sous HKEY_CURRENT_USER ? on met rarement des clés à cet endroit là, d'habitude c'est plutôt dans HKEY_CURRENT_USER\Software

  9. #9
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut
    Je viens de vérifier dans mon registre et c'est bien au bon endroit .

    Sinon, j' ai mis un try catch au niveau du getValue. Dans le catch, je lui dis de récupérer le message d'erreur et j'ai toujours : "La référence d'objet n'est pas définie à une instance d'un objet."
    De plus, au final je récupère bien la valeur que j'avais donné a l initialisation de la variable qui est censée contenir au final la valeur récupérée par le biais du getValue.

    Pour résumer, l'erreur vient bien du getValue et la description de celle-ci est :
    "La référence d'objet n'est pas définie à une instance d'un objet."
    Hum, j édite ce message. En effet, j'ai effectué une application où cela marche en utilisant la meme méthode... Cela viendrait ptet du windows service... Vous trouverez son code apres la note ci-apres.

    NOTE : je code dans l application ce que j'envoie en lui rajoutant une clé provenant du codage md5 du nom de l'ordinateur. Ensuite je verifie que cette clé est bien la meme sur le windows service (en gros que l'application et le windows service sont situés sur la même machine). Si c'est le cas, j'extrait la valeur envoyée. J'ai testé en renvoyant a mon application une valeur du genre "desactiiiiveeee" si la valeur recue est : "desactiv". Tout marche bien et donc le probleme vient du windows service (sur une autre application créée pour recuperer les données ds le registre, tout marche)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    public Class EssWitchService
     
        '--------------------------------- Declaration de variables -----------------------------------
        Public reception As New Threading.ManualResetEvent(False)
        Private listener As Net.Sockets.TcpListener
        Const PORT_NUM As Integer = 1039
        Dim EndPoint As Net.IPEndPoint
     
     
        '---Fonction au demarrage du service :Lancement du thread correspondant à la fonction "General" et qui va tourner en boucle---
        Protected Overrides Sub OnStart(ByVal args() As String)
            Dim thread As New System.Threading.Thread(AddressOf General)
            thread.IsBackground = True
            thread.Start()
        End Sub
     
        '----------------------------Thread qui va tourner en boucle et attendre une connexion d'un client-------------------
        Public Sub General()
     
            Try
                Dim ipLocale As Long = 16777343
                EndPoint = New Net.IPEndPoint(ipLocale, 1039)
                Dim listener As New TcpListener(EndPoint)
                listener.Start()
     
                While True
                    reception.Reset()
                    listener.BeginAcceptTcpClient(New AsyncCallback(AddressOf AcceptCallback), listener)
                    reception.WaitOne()
                End While
     
            Catch ex As Exception
                System.Windows.Forms.MessageBox.Show(ex.Message)
            End Try
        End Sub
     
        '---------------------------------Fonction qui sera lancée lorsque qu'un client va se connecter--------------------------
        Public Sub AcceptCallback(ByVal ar As IAsyncResult)
            Try
                Dim receptionBit(1024) As Byte
                Dim listener As TcpListener = CType(ar.AsyncState, TcpListener)
                Dim client As TcpClient = listener.EndAcceptTcpClient(ar)
                Dim stream As NetworkStream = client.GetStream()
     
                '-------On recupere la chaine provenant de l'application----------------------------------
                stream.Read(receptionBit, 0, receptionBit.Length)
                Dim valeurrecue As String = System.Text.Encoding.ASCII.GetString(receptionBit)
     
                '------------------Verification des clés-------------------------------------------
                Dim valeurRetour As String
                Dim valeur As String = verifKeyRecupVal(valeurrecue)
                Select Case valeur
                    Case "erreur"
                        valeurRetour = "ERREUR"
                    Case "activ"
                        Dim valIntermediaire As String = getEssbaseActivate()
                        EcrireLog("tttfdfdfdtt", valIntermediaire)
                        valeurRetour = valIntermediaire
                        'valeurRetour = "ACTIVEE"
                        ' Catch ex As Exception
                        ' EcrireLog("tutu", ex.Message)
                        'End Try
                    Case "desactiv"
                        valeurRetour = "DESACTIVEE"
                End Select
     
                '------------------------- Preparation a l envoie-----------------------
                Dim ValFinal As String = AjoutKeySlashEtoile(valeurRetour)
     
                '----On renvoie le resultat à l'application--------------------------------------
                Dim EnvoieBit(1024) As Byte
                reception.Set()
                EnvoieBit = System.Text.Encoding.ASCII.GetBytes(ValFinal)
                stream.Write(EnvoieBit, 0, EnvoieBit.Length)
            Catch ex As Exception
     
            End Try
     
        End Sub
     
     
        '----------------- Fonction correspondant à l'arret du service ---------------------------
        Protected Overrides Sub OnStop()
            listener.Stop()
        End Sub
     
    End Class
    Merci en tout cas pour votre aide a tous, passée et future ^^ Il faut que maintenant je comprenne pourquoi cela ne marche pas dans le windows service ... Help !

  10. #10
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut
    Bon, je suis perdu, cela ne marche toujours pas. J'ai essayé de faire un CType(reg.getvalue("essbase"),String) pour récuperer un string des fois que la conversion ne se fasse pas implicitement et j'ai toujours le même problème ...
    Auriez-vous d'autres idées svp ?

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Un service Windows tourne en général sous un compte d'utilisateur spécifique, donc la clé HKEY_CURRENT_USER n'est pas la même que pour toi...

  12. #12
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut
    Bah oui mais alors pourquoi cela marche quand je fais avec une autre application (meme ordi, meme compte d'utilisateur et jsuis administrateur) sans passer par un windows service ? . En gros, je recupere la valeur du registre et je l affiche dans une textbox lors du clique sur un bouton

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par vinou94400 Voir le message
    Bah oui mais alors pourquoi cela marche quand je fais avec une autre application (meme ordi, meme compte d'utilisateur et jsuis administrateur) sans passer par un windows service ? . En gros, je recupere la valeur du registre et je l affiche dans une textbox lors du clique sur un bouton
    Je pense que tu n'as pas bien compris ce que je voulais dire... Quand toi tu exécutes un programme, il s'exécute en tant que "vinou94400" (par exemple). Quand un service s'exécute, il s'exécute en tant que "SYSTEM", "SERVICE LOCAL" ou "SERVICE RESEAU". Chacun de ces utilisateurs a une version différente de HKEY_CURRENT_USER. Donc peut-être que la clé EssSwitch existe dans le HKEY_CURRENT_USER de ton compte, mais pas dans le compte des utilisateurs système qui exécutent les services

  14. #14
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut
    Arf, je crois que je vais détailler ce que l'on me demande de faire.

    Globalement, dans la société ou je fais mon apprentissage, ils ont un programme qui permet de checker s'il y a des mises a jour disponibles pour des applications. Ce programme est installé sur chaque ordinateur et se lance automatiquement au démarrage. Ce programme stocke des informations dans une base de registre et les récupère sans problème.

    Ce que je dois faire est de créer un service qui va effectuer les opérations qui normalement doivent être faites par le logiciel. Celui-ci envoie donc une requête au windows service. Celui-ci va récupérer des informations dans le registre ou les modifier (par exemple récupérer le chemin du fichier xml regroupant des informations sur les applications) . Ensuite, le windows service renvoie la valeur récupérée au logiciel.

    Bref, je suis perdu car si dans la version de base du logiciel (sans l'utilisation du windows service), les modifications ou la récupération de valeur dans la base de registre se font sans problème ceci sur chaque ordinateur où le logiciel est installé, pourquoi cela ne marcherait pas avec un windows service.

    S il te plait, pourrais tu m'expliquer plus clairement si tu vois ce que je ne comprend pas. Serait-il possible que ce que je dois faire soit impossible à réaliser ?

    Merci d'avance

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par vinou94400 Voir le message
    S il te plait, pourrais tu m'expliquer plus clairement si tu vois ce que je ne comprend pas.
    Ben je sais pas trop comment te l'expliquer autrement que ce que j'ai déjà fait...
    C'est juste que la clé HKEY_CURRENT_USER n'est pas la même pour tous les comptes d'utilisateurs, donc ce n'est pas parce que la clé que tu cherches existe pour toi qu'elle existera pour le compte qui exécute le service. Il faudrait la créer dans le HKEY_CURRENT_USER de ce compte

    Citation Envoyé par vinou94400 Voir le message
    Serait-il possible que ce que je dois faire soit impossible à réaliser ?
    Si j'ai bien compris ce que tu cherches à faire, ce n'est sûrement pas impossible...

  16. #16
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut
    En fait, quand j'envoie la requête de l'application au service, elle contient le nom de la machine. Ensuite, le service compare le nom de la machine avec le nom de la machine sur lequel il est. Si c'est le cas, il effectue l'action voulue. Cela ne regle-t-il pas la question ? Je suppose que non vu qu'il s'agit du nom d'utilisateur. Mais pourquoi est ce que ca marche sans windows service mais pas avec Excuses moi en tout cas de t'embêter avec ça... Bref je suis perdu surtout que pour le moment, j'ai juste réalisé une application qui affiche le résultat de la valeur récupérée pis envoyée par le windows service. De plus, je suis sur mon ordinateur personnel et connecté à aucun réseau...

    Rahlala, je suis au fond du gouffre ^^

  17. #17
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par vinou94400 Voir le message
    En fait, quand j'envoie la requête de l'application au service, elle contient le nom de la machine. Ensuite, le service compare le nom de la machine avec le nom de la machine sur lequel il est. Si c'est le cas, il effectue l'action voulue. Cela ne regle-t-il pas la question ? Je suppose que non vu qu'il s'agit du nom d'utilisateur. Mais pourquoi est ce que ca marche sans windows service mais pas avec Excuses moi en tout cas de t'embêter avec ça... Bref je suis perdu surtout que pour le moment, j'ai juste réalisé une application qui affiche le résultat de la valeur récupérée pis envoyée par le windows service. De plus, je suis sur mon ordinateur personnel et connecté à aucun réseau...
    Je comprends plus du tout le rapport avec le problème initial

    Citation Envoyé par vinou94400 Voir le message
    Rahlala, je suis au fond du gouffre ^^
    Ben dis toi que tu peux pas tomber plus bas

  18. #18
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut
    Je vais te laisser tranquille et y reflechir Merci en tout cas

  19. #19
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Utilisation du background worker
    Bonjour,

    J'ai également eu un problème similaire au tien. La vérification de la mise à jour de l'application (sur le serveur) renvoyait une valeur nulle et générait une exception. J'ai vu que tu utilisais un nouveau thread pour vérifier la mise à jour ce qui théoriquement doit fonctionner mais dans la pratique !!!!. Pour résoudre ton problème, je te suggère d'utiliser la classe System.ComponentModel.BackgroundWorker (au lieu de Thread) qui permet de mieux gérer l'exécution des threads de vérification et de récupérer à coup sur une valeur au lieu de rien. Cette classe est relativement simple à utiliser et dispose des évènements pour s'assurer de la bonne finalisation du thread.
    J'utilise cette classe pour vérifier la mise à jour disponible de mes applications et elle fonctionne à tous les coups.

  20. #20
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut
    Merci beaucoup Je vais tester cela demain et je vous tiens au courant. C'est sympa de m'aider en tout cas

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/02/2014, 13h28
  2. Modification valeur Base de Registres
    Par Br21_b dans le forum VBScript
    Réponses: 1
    Dernier message: 05/01/2009, 14h23
  3. probleme:recuperer une valeur stockée dans une session
    Par oasma dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 26/03/2007, 00h38
  4. Réponses: 4
    Dernier message: 12/06/2006, 13h08
  5. Probleme recuperation d'une valeur : script vbs -> .bat
    Par pinpin_du_net dans le forum Windows
    Réponses: 3
    Dernier message: 10/05/2005, 12h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo