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 :

Problème de blocage dans mon programme


Sujet :

VB.NET

  1. #1
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut Problème de blocage dans mon programme
    Bonjour,

    Je vais commencer ce post par du code, pour changer, et expliquer mon problème en dessous de ce dernier.

    Alors voilà, j'ai un form qui est un splashscreen de mon appli, dont voici le code qui nous intéresse :

    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
     Private Sub Splashscreen_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
     
            Dim cle_update As RegistryKey = My.Computer.Registry.CurrentUser.OpenSubKey("software\\XXXX\\XXXXX\\Parametres\\")
            Dim autoupdate As String = cle_update.GetValue("AutoUpdate")
            Dim verif As String = cle_update.GetValue("Check")
     
            'On vérifie si la valeur de la clé Check a changé, puis si c'est '0', on vérifie si l'option de mise à jour est sélectionnée. Si oui, on vérifie s'il y a une nouvelle version
            If verif = "0" Then
                If autoupdate = "1" Then
                    CheckUpdate()
                End If
            End If
     
            'On active la voix si l'option est activée
            Try
                Dim cle_voix As RegistryKey = My.Computer.Registry.CurrentUser.OpenSubKey("Software\\ClearMind\\Kumquat2\\Parametres\\", True)
                Dim voix As String = cle_voix.GetValue("Voices")
     
                If voix = "1" Then
                    My.Computer.Audio.Play(My.Resources.v_loading, AudioPlayMode.Background)
                End If
            Catch ex As Exception
                'on ne fait rien
            End Try
     
            'On affiche la version du logiciel
            lbl_version.Text = "V " & Application.ProductVersion.ToString
     
            'On initialise et on lance le timer
            i = 0
            Timer.Start()
     
        End Sub
    Puis, j'ai un form qui sert à télécharger la maj et à l'installer. Voici également le bout de code qui nous intéresse :

    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
     Private Sub ChkUpdate_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
            httpclient = New WebClient
            Dim Telecharger As New WebClient
            Dim sourceURL As String
            Dim filedir As String
            Dim install As RegistryKey
            Dim resolution As String
     
            Dim clecheck As RegistryKey
     
            sourceURL = Telecharger.DownloadString("https://xxxxxxx/Update.exe")
     
            parametres = My.Computer.Registry.CurrentUser.OpenSubKey("SOFTWARE\\ClearMind\\Kumquat2\\Parametres\\")
     
            filedir = "C:\ProgramData\Kumquat 2\maj_Kumquat2.exe"
            resolution = parametresl.GetValue("Resolution")
     
            ProgressBar1.Value = 0
            ProgressBar1.Maximum = 100
     
            Try
                httpclient.DownloadFileAsync(New Uri(sourceURL), (filedir))
            Catch ex As Exception
                Me.Finalize()
                MsgBox("Téléchargement impossible." + vbCrLf & vbCrLf & ErrorToString() + vbCrLf + vbCrLf + "Veuillez réessayer ultérieurement ou contacter xxxx.", MsgBoxStyle.Critical)
                If resolution = "1920 x 1080" Then
                    clecheck = Registry.CurrentUser.CreateSubKey("Software\\xxxxx\\xxxxxx\\Parametres\\")
                    clecheck.SetValue("Check", "1", RegistryValueKind.String)
                    clecheck.Close()
                    Splashscreen.Show()
                    Me.Close()
                ElseIf resolution = "1366 x 768" Then
                    clecheck = Registry.CurrentUser.CreateSubKey("Software\\xxxxxxx\\xxxxxxx\\Parametres\\")
                    clecheck.SetValue("Check", "1", RegistryValueKind.String)
                    clecheck.Close()
                    Splashscreen.Show()
                    Me.Close()
                End If
            End Try
     
        End Sub
    Bon, je vais essayer d'expliquer aussi clairement que possible mon problème.

    1) L'appli se lance en affichant le form du splashscreen.
    2) On vérifie si la clé de registre Check est à 0.
    3) Si oui, alors il n'y a pas eut d'incident de téléchargement, on vérifie alors si l'option de maj automatique est activée
    4) Si oui, alors on effectue ce qu'il y a dans la fonction "Checkupdate" (elle compare la version actuelle du logiciel avec celle en ligne. Si différent --> msgbox, puis ouverture du form Chkupdate, qui télécharge la maj)
    5) Ouverture du form Chkupdate (code n°2)
    6) Pour X raison, admettons que l'URl est invalide, ou que l'on ne puisse pas dl la maj.
    7) Le catch libère toutes les ressources, puis change la clé de registre Check, pour la mettre à 1
    8) On rouvre le splashscreen, puis on ferme Chkupdate
    9) Or, c'est à ce moment que ça bloque. Le splashscreen s'affiche, mais l'exécution s'arrête. Pas d'erreur, mais le programme freeze. La version du logiciel, qui passe par une affectation de string à l'objet label, ne se fait pas. Donc le programme dès le début de l'exécution du splashscreen. De plus, si j'enlève le "Me.Finalize()", j'ai une grosse erreur de la pile d'appel (un truc comme ça) qui me fait simplement stopper net le programme. Je en sais pas si ce finalize est juste, mais il pallie au problème en totu cas.

    Quelqu'un pourrait-il donc me dire si j'oublie quelque chose ?

    Normalement, vu que la clé Check est passée à un, la vérification de maj ne devrait pas s'effectuer, et le reste du code devrait s'effectuer tout simplement (plus bas à la fin du timer, je remet la clé Check à 0)

    Je sais pas si j'ai été clair, mais bref voilà mon soucis, et je ne vois pas du tout de où cela peut venir. Je ne fais rien de spécial à part rappeler le splashscreen, et ce dernier ne veut pas exécuter le code.


    Merci d'avance pour vos réponses, et surtout n'hésitez pas si vous avez des questions, pour éclaircir des points. Je me ferais un plaisir de vous répondre pour vous aider à m'aider !

    Cordialement,

    --
    Shennong

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Je n'ai pas tout lu, ni testé, mais règle générale, pour réussir à jouer dans le registre avec VB.net, il faut lancer VB.net en administrateur.

    Tu peux toujours essayer d'ajouter cet exemple microsoftien à ton programme. À première vue, cela devrait aider:

    https://code.msdn.microsoft.com/VBUA...ation-39b7606f
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut
    Bonjour,

    Et merci de votre réponse. Cependant, je ne pense pas que le problème vienne des clés de registre, car elles se créent, et se lisent sans soucis. Je ne vois pas pourquoi mon programme s'arrête lors de la relance du splashscreen, vraiment pas ...


    Merci quand-même.

    Cordialement,

    --
    Shennong

  4. #4
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut
    Bon, j'ai trouvé un moyen détourné qui fonctionne. C'est un peu moins propre mais ça marche.

    Cordialement,

    --
    Shennong

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Petit problème dans mon programme
    Par bsangoku dans le forum MATLAB
    Réponses: 8
    Dernier message: 22/04/2010, 16h19
  2. Problème de segmentation dans mon programme
    Par KaNDeL dans le forum Débuter
    Réponses: 5
    Dernier message: 29/09/2008, 16h45
  3. Problème d'éxecution dans mon programme
    Par mouchT8 dans le forum C
    Réponses: 8
    Dernier message: 16/05/2008, 01h36
  4. Problème dans mon programme
    Par zesister dans le forum Scheme
    Réponses: 17
    Dernier message: 02/05/2008, 02h39
  5. [Thread] Blocage dans mon programme
    Par Xo Sonic oX dans le forum EDT/SwingWorker
    Réponses: 4
    Dernier message: 18/06/2005, 17h12

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