Tuer SLDWorks.exe -Embedding

Bonjour,

j'ai développé une application en VB.NET. Elle fonctionne bien, mais la fin de l'execution n'est pas totalement propre.

  1. L'application ouvre un session solidworks : swApp = New SldWorks
  2. Il se passe tout un tas de chose...
  3. Ensuite je ferme le document :    swApp.CloseDoc(sDocfilename)
  4. Il se passe encore de choses et le programme se termine

En toute logique j'ai une fenêtre solidworks vide qui reste ouverte. Si je la ferme à la main,  je constate que le processus SLDWORKS passe alors dans la liste des "processus en arrière-plan" avec un "-Embedding" dans la ligne de commande. Je constate le même phénomène si je rajoute dans le code : swApp.ExitApp() .

Cette session solidworks en arrière plan fait planter les nouvelles sessions. Il faut donc le tuer à la main.

Comment s'en sortir ?

Qu'est-ce que cette option -Embedding ?

Cordialement,

Benoît

 

Bonjour,

Pour t'en sortir tu peux, en fin de programme, faire une boucle qui liste tous les processus actifs et "tuer" le ou les processus "SLDWORKS.exe", c'est ce que je fait sur tous mes programmes (C#) qui pilotent Solidworks à un moment ou un autre.

Cordialement,

1 « J'aime »

Je me demandais si il y a avait moyen pour mon application de lister ces processus enfant. Mais ça n'a pas l'air aisé.

Tuer tous les processus solidworks me semble un peu brutal. Mon application est lancée en tant que tâche (à l'approbation d'un document) et ça serait dommage de tuer la session de l'utilisateur.

Pour lister les processus enfant, il y a une solution fonctionnelle écrite en C# ICI.

Plus qu'à traduire en VB.Net et adapter à ton besoin.

Cordialement, 

1 « J'aime »

je l'avais déjà remarqué et cela me semblait compliqué. J'espérai quelque chose de plus simple et direct dans  system.diagnostic.process ou du genre.

Bon du coup je vais prendre le temps de creuser cet exemple.

Merci et Bonne soirée

 

Si cela te semble trop complexe par rapport à ton besoin et comme il y a fort à parier que tu vas rencontrer des problèmes liés aux droits nécessaires pour l'utilisation de ces fonctions, tu peux peut-être contourner tout ça en revenant à la première suggestion (Pour t'en sortir tu peux, en fin de programme, faire une boucle qui liste tous les processus actifs et "tuer" le ou les processus "SLDWORKS.exe") mais en ne tuant que le processus dont le "MainWindowTitle" contient une certaine valeur, valeur que tu peux définir en créant par exemple une pièce avec un nom "bizarre" avant de tuer ce processus. Cela te permet de rester sur des accès simples et directs dans system.diagnostic.process.

Cordialement,

1 « J'aime »

oui, en effet.

  1. Je lance solidworks
  2. j'ouvre un document
  3. j'identifie le process SolidWorks
  4. il se passe tout un tas de truc
  5. je tue ce processus

Ca me semble pas mal

1 « J'aime »