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 :
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 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
Bon, je vais essayer d'expliquer aussi clairement que possible mon problème.
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
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
Partager