Gérer une erreur dans un VB.net [Résolu/Fermé]

Messages postés
123
Date d'inscription
jeudi 9 mars 2017
Statut
Membre
Dernière intervention
28 octobre 2019
- - Dernière réponse : Whismeril
Messages postés
13983
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2019
- 25 juil. 2018 à 23:45
Bonjour à tous,

Voici mon problème : dans mon logiciel, si l'utilisateur clique sur un bouton, cela ouvre un installateur (qui se lance en administrateur automatiquement). La fenêtre UAC s'ouvre pour demander l'autorisation de s'exécuter. Si l'utilisateur clique sur "Oui", tout va bien. Mais si il clique sur "Non", alors, Windows se fâche :

"Consultez la fin de ce message pour plus de détails sur l'appel du débogage
juste-à-temps (JIT) à la place de cette boîte de dialogue.
                            • Texte de l'exception **************

System.ComponentModel.Win32Exception (0x80004005): L’opération a été annulée par l’utilisateur
à System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
à System.Diagnostics.Process.Start()
à System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
à System.Diagnostics.Process.Start(String fileName, String arguments)
à Wi_Fi_One_2._0._0.Form3.Button2_Click(Object sender, EventArgs e) dans C:\Users\Public\Documents\IPS\Wi-Fi One 2.0.0\Wi-Fi One 2.0.0\Form3.vb:ligne 18
à System.Windows.Forms.Control.OnClick(EventArgs e)
à System.Windows.Forms.Button.OnClick(EventArgs e)
à System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
à System.Windows.Forms.Control.WndProc(Message& m)
à System.Windows.Forms.ButtonBase.WndProc(Message& m)
à System.Windows.Forms.Button.WndProc(Message& m)
à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
à System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
                            • Assemblys chargés **************

mscorlib
Version de l'assembly : 4.0.0.0
Version Win32 : 4.7.3130.0 built by: NET472REL1LAST_B
CodeBase : file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
Wi-Fi One 2.0.0
Version de l'assembly : 1.0.0.0
Version Win32 : 1.0.0.0
CodeBase : file:///C:/Users/Public/Documents/IPS/Wi-Fi%20One%202.0.0/Wi-Fi%20One%202.0.0/bin/Debug/Wi-Fi%20One%202.0.0.exe
----------------------------------------
Microsoft.VisualBasic
Version de l'assembly : 10.0.0.0
Version Win32 : 14.7.3062.0 built by: NET472REL1
CodeBase : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
----------------------------------------
System
Version de l'assembly : 4.0.0.0
Version Win32 : 4.7.3130.0 built by: NET472REL1LAST_B
CodeBase : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Core
Version de l'assembly : 4.0.0.0
Version Win32 : 4.7.3130.0 built by: NET472REL1LAST_B
CodeBase : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Windows.Forms
Version de l'assembly : 4.0.0.0
Version Win32 : 4.7.3130.0 built by: NET472REL1LAST_B
CodeBase : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
Version de l'assembly : 4.0.0.0
Version Win32 : 4.7.3130.0 built by: NET472REL1LAST_B
CodeBase : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration
Version de l'assembly : 4.0.0.0
Version Win32 : 4.7.3062.0 built by: NET472REL1
CodeBase : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
Version de l'assembly : 4.0.0.0
Version Win32 : 4.7.3130.0 built by: NET472REL1LAST_B
CodeBase : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Runtime.Remoting
Version de l'assembly : 4.0.0.0
Version Win32 : 4.7.3130.0 built by: NET472REL1LAST_B
CodeBase : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
----------------------------------------
mscorlib.resources
Version de l'assembly : 4.0.0.0
Version Win32 : 4.7.3062.0 built by: NET472REL1
CodeBase : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_fr_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------
System.Windows.Forms.resources
Version de l'assembly : 4.0.0.0
Version Win32 : 4.7.3062.0 built by: NET472REL1
CodeBase : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_fr_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
                            • Débogage JIT **************

Pour activer le débogage juste-à-temps (JIT), le fichier de configuration pour cette
application ou cet ordinateur (machine.config) doit avoir la valeur
jitDebugging définie dans la section system.windows.forms.
L'application doit également être compilée avec le débogage
activé.

Par exemple :

<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

Lorsque le débogage juste-à-temps est activé, les exceptions non gérées
seront envoyées au débogueur JIT inscrit sur l'ordinateur
plutôt que d'être gérées par cette boîte de dialogue.
"

Comment puis-je faire pour gérer cette exception ?

Merci !

Jojorealisateur
Afficher la suite 

4 réponses

Messages postés
219
Date d'inscription
jeudi 2 mai 2013
Statut
Membre
Dernière intervention
15 juillet 2019
19
0
Merci
Bonjour,

Le Try ... Catch ne fonctionne pas ?

K
Messages postés
13983
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2019
418
0
Merci
Bonjour

manifestement le problème se situe dans Form3.Button2_Click(Object sender, EventArgs e)
à la ligne 18 du fichier Form3.vb ou dans "l'instruction" lancée à cette ligne.

Il faudrait que tu mettes un point d'arrêt un peu avant, que tu exécutes en pas à pas pour observer le contenu des variables et le comportement de l'exécution, afin de voir comment gérer l'annulation par l'utilisateur.

Voir ici
https://msdn.microsoft.com/fr-fr/library/k0k771bt.aspx

Ensuite, poste ton code, avec la coloration syntaxique (procédure détaillée là https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code)
Explique ce qui se passe, et quel est le contenu des variables au moment du bug.

Comme le dit Kalissi, une clause Try sera peut-être la solution


Messages postés
123
Date d'inscription
jeudi 9 mars 2017
Statut
Membre
Dernière intervention
28 octobre 2019
2
0
Merci
Bonjour,

Il faut savoir que j'utilise uniquement
Process.start ("CHEMINDACCES")
pour lancer ce fichier qui est de base automatiquement en administrateur.
L'utilisateur peut aussi lancer d'autres fichiers qui ne sont pas de base en administrateur, mais qui sont lancés en tant que tel via ce code :
Try
Dim procInfo As New ProcessStartInfo()
procInfo.UseShellExecute = True
procInfo.FileName = (CHEMINDACCES)
procInfo.WorkingDirectory = ""
procInfo.Verb = "runas"
Process.Start(procInfo)
Catch ex As Exception
MessageBox.Show(ex.Message.ToString())
End Try
. Lorsque j'utilise ce code, si l'utilisateur clique sur "Non", il n'y a qu'une petite "MsgBox" qui s'ouvre et qui dit "L'opération a été annulée par l'utilisateur.". Ce n'est pas dérangeant...
J'ai essayé autre chose : lorsque je clique droit sur mon logiciel compilé et que je le lance entièrement en administrateur, il ne demande aucune confirmation UAC. J'ai donc essayé d'aller changer le paramètre
requestedExecutionLevel  level="requireAdministrator" uiAccess="false"
pour que tout se lance en administrateur. Le problème, c'est que lorsque je le génère, il y a apparemment une erreur avec ClicOnce. Pourtant, je ne l'utilise pas...

Que dois-je faire pour supprimer cette erreur ?

Merci !

Jojorealisateur
Messages postés
13983
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2019
418
0
Merci
Qu'il y ait une messageBox c'est normal, c'est ce que tu lui a demandé à ton code.
Et là en l'état, ça ne doit pas affecter la suite du programme.

On peut faire en sorte que le messageBox ne s'affiche pas dans ce cas là.
Il faut mettre plusieurs catch en fonction du type de l'erreur, voir exemples ici
https://docs.microsoft.com/fr-fr/dotnet/visual-basic/language-reference/statements/try-catch-finally-statement

PS: je constate que tu n'as pas lu ou appliqué le tuto sur les balises de codes. Je suis feignant quand il s'agit d'aider bénévolement : la prochaine fois, je ne lirais pas.

Whismeril
Messages postés
13983
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2019
418 -
Pour clickonce je ne sais pas
jojorealisateur
Messages postés
123
Date d'inscription
jeudi 9 mars 2017
Statut
Membre
Dernière intervention
28 octobre 2019
2 -
Bonjour,

Je suis désolé pour les balises, je ne trouve pas "VB" ou "Visual Basic" ou quelque chose qui y ressemble... La seule chose que je vois, c'est "Basic", mais c'est un tout autre langage, non ?

Lorsque vous parlez de "Try" et de "Catch", je ne comprends pas... Comment devrais-je arranger le code pour les y insérer ?

La MsgBox ne me dérange pas du tout... Je me demandais juste si ça n'arrangerai pas les choses d'utiliser le code à la place de (désolé pour les balises)
Process.Start ("CHEMINDACCES")
...

Je vais essayer et je vous donne le résultat...

Merci et encore désolé pour les balises...

Jojorealisateur
Whismeril
Messages postés
13983
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2019
418 -
Pour la coloration basic c'est bon.

Lorsque vous parlez de "Try" et de "Catch", je ne comprends pas... Comment devrais-je arranger le code pour les y insérer ?


Il y a plusieurs interprétations à cette phrase....
L'une d'elles suppose que tu as pris ce code quelque part, sans le comprendre et que tu espères en le bidouillant finir par faire ce que tu veux. Si c'est le cas, et bien le meilleur conseil que je puisse te donner, est de laisser ton projet de coté quelques jours afin de suivre ce cours http://plasserre.developpez.com/cours/vb-net/ il te donnera les bases pour ensuite reprendre ton projet plus sereinement.

Si ça n'est pas le cas, soit plus clair dans ta demande, car
La MsgBox ne me dérange pas du tout... Je me demandais juste si ça n'arrangerai pas les choses
ça manque un peu cohérence. Le message ne te pose pas de problème, le programme devrait continuer à fonctionner (en tout cas c'est ce qu'indique ton code et tu n'as pas dit qu'il y a avait un autre programme)
jojorealisateur
Messages postés
123
Date d'inscription
jeudi 9 mars 2017
Statut
Membre
Dernière intervention
28 octobre 2019
2 -
Bonjour,

Excusez-moi, je n'ai effectivement pas été très clair dans ma réponse...
Effectivement, j'ai pris ce code quelque part, mais je le comprends... J'ai commencé ce projet dans mes débuts en VB.net et je l'ai repris seulement maintenant. À l'époque, je ne savais pas comment faire pour démarrer un fichier en tant qu'administrateur... Depuis, ça va... ;-)

Lorsque je dis que la MsgBox ne me dérange pas, c'est parce que vous souligniez sa présence... C'est tout à fait normal qu'elle soit là...


Finalement, j'ai essayé de remplacer le
Process.Start ("CHEMINDACCES")
(voilà pour les balises ;-)) par le code
Try
Dim procInfo As New ProcessStartInfo()
procInfo.UseShellExecute = True
procInfo.FileName = (CHEMINDACCES)
procInfo.WorkingDirectory = ""
procInfo.Verb = "runas"
Process.Start(procInfo)
Catch ex As Exception
MessageBox.Show(ex.Message.ToString())
End Try
et ça marche. Lorsque l'utilisateur clique sur "Non" avec la fenêtre UAC, la MsgBox s'affiche au lieu de la boîte d'erreur de Windows...

Merci pour votre aide... Et désolé pour les balises...

Jojorealisateur
Whismeril
Messages postés
13983
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2019
418 -
Ha ok, comme ton premier message parlais d'un message d'erreur et que ton code montre un MessageBox dans un catch, bêtement, j'ai pensé qu'il s'agissait du même message.