Bonjour,

je rencontre un problème assez étrange. Une fonction qui s'exécute parfaitement lorsque que je lance mon application depuis Eclipse (run as application) ne s’exécute pas lorsque je compile le projet et exécute le .jar.

Il s'agit d'une fonction qui permet de se connecter à un ordinateur distant (sur réseau local) via un composant ActiveX afin d'y récupérer des informations stockées dans les classes WMI du système.
Une fonction assez basique en somme, mais qui ne fonctionne qu'en mode débug étrangement...

A savoir que j'ai essayé deux versions d'Eclipse (pensant à une erreur de compilation due à un IDE caduque). Le résultat reste le même.

Je vous laisse le code si cela peut aider. Je ne laisse pas les informations de connexion pour des raisons évidentes mais il s'agit d'un compte différent de celui qui lance l'application, et qui est administrateur des postes de travail ciblés.
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
 
	        try {
			// Connexion a l'ordinateur
			System.out.println("Connexion à l'ordinateur - En cours");
			ActiveXComponent axWmi_Computer = new ActiveXComponent("WbemScripting.SWbemLocator");
	            Variant invoke_Computer = axWmi_Computer.invoke("ConnectServer", var_ParametresConnexion);
	            System.out.println("Connexion à l'ordinateur - Succès");
 
	            ActiveXComponent axWmi_ComputerClass;
	            Variant invoke_ComputerClassComponent;
 
	            // Connexion a la classe Win32_ComputerSystem
	            System.out.println("Connexion au système - En cours");
	            axWmi_ComputerClass = new ActiveXComponent(invoke_Computer.toDispatch());
	            invoke_ComputerClassComponent = axWmi_ComputerClass.invoke("InstancesOf", "Win32_ComputerSystem");
	            System.out.println("Connection au système - Succès");
 
	            Enumeration<Variant> enum_Proprietes;
	            ActiveXComponent ax_Proprietes;
	            enum_Proprietes = new EnumVariant(invoke_ComputerClassComponent.getDispatch());
 
	            while (enum_Proprietes.hasMoreElements()){ //Recherche Nom Ordinateur
	                ax_Proprietes = new ActiveXComponent(enum_Proprietes.nextElement().getDispatch());
	                jIF_FicheOrdinateur.set_WmiHostName(ax_Proprietes.getPropertyAsString("Name"));
	                // TODO gerer le cas ou nom different
	                break;
	            }
 
	            // Connexion a la classe Win32_BaseBoard
				axWmi_ComputerClass = new ActiveXComponent(invoke_Computer.toDispatch());
				invoke_ComputerClassComponent = axWmi_ComputerClass.invoke("InstancesOf", "Win32_BaseBoard");
	            enum_Proprietes = new EnumVariant(invoke_ComputerClassComponent.getDispatch());
	            while (enum_Proprietes.hasMoreElements()){
	                ax_Proprietes = new ActiveXComponent(enum_Proprietes.nextElement().getDispatch());
	                jIF_FicheOrdinateur.set_WmiSerial(ax_Proprietes.getPropertyAsString("SerialNumber"));
	                break;
	            }
 
	            // Connexion a la classe Win32_ComputerSystem
	            invoke_ComputerClassComponent = axWmi_ComputerClass.invoke("InstancesOf", "Win32_ComputerSystem");
	            enum_Proprietes = new EnumVariant(invoke_ComputerClassComponent.getDispatch());
	            String str_Utilisateur = null;
	            while (enum_Proprietes.hasMoreElements()){
	                ax_Proprietes = new ActiveXComponent(enum_Proprietes.nextElement().getDispatch());
	                str_Utilisateur = (ax_Proprietes.getPropertyAsString("UserName"));
	                break;
	            }
	            if (str_Utilisateur == null){
	            	str_Utilisateur = "Session fermée";
	            }
	            jIF_FicheOrdinateur.set_SessionActive(str_Utilisateur);
 
	            ax_Proprietes = null;
	            enum_Proprietes = null;
	            invoke_ComputerClassComponent = null;
	            axWmi_ComputerClass = null;
	            axWmi_Computer = null;
 
 
			}
			catch(ComException e){
	        	System.out.println(str_NomPc + ";Erreur COM;" + e.getMessage());
	        }
			finally {
	            ComThread.Release();
	        }