Witam
W VB.NET roku stworzyłem aplikację. Działa dobrze, ale koniec wykonania nie jest do końca czysty.
- Aplikacja loguje się do solidworks: swApp = New SldWorks
- Dzieje się bardzo dużo...
- Następnie zamykam dokument: swApp.CloseDoc(sDocfilename)
- Wciąż dużo się dzieje, a program dobiega końca
Logicznie rzecz biorąc, mam puste okno solidworks, które pozostaje otwarte. Jeśli zamknę go ręcznie, widzę, że proces SLDWORKS przechodzi następnie do listy "procesów działających w tle" z "-Embedding" w wierszu poleceń. To samo zjawisko zauważam, jeśli dodam w kodzie: swApp.ExitApp() .
Ta sesja solidworks działająca w tle powoduje awarię nowych sesji. Musisz więc zabić go ręcznie.
Jak się z tego wydostać?
Co to jest ta opcja -Embedding?
Pozdrowienia
Benedykt
Witam
Aby się z tego wydostać, możesz, na końcu programu, zrobić pętlę, która wyświetla listę wszystkich aktywnych procesów i "zabić" "SLDWORKS.exe" proces(y), co robię we wszystkich moich programach (C#), które napędzają Solidworks w tym czy innym czasie.
Pozdrowienia
1 polubienie
Zastanawiałem się, czy istnieje sposób, aby moja aplikacja wyświetliła listę tych procesów podrzędnych. Ale nie wygląda to na łatwe.
Zabijanie wszystkich procesów solidworks wydaje mi się nieco brutalne. Moja aplikacja jest uruchamiana jako zadanie (gdy dokument zostanie zatwierdzony) i szkoda byłoby zabić sesję użytkownika.
Aby wyświetlić listę procesów podrzędnych, istnieje funkcjonalne rozwiązanie napisane w języku C# ICI.
Wystarczy, że przełożysz to na VB.Net i dostosujesz do swoich potrzeb.
Pozdrowienia
1 polubienie
Już to zauważyłem i wydawało mi się to skomplikowane. Miałem nadzieję na coś prostszego i bardziej nieskomplikowanego w system.diagnostic.process lub coś w tym stylu.
Poświęcę więc trochę czasu, aby zagłębić się w ten przykład.
Dziękuję i życzę miłego wieczoru
Jeśli wydaje się to zbyt skomplikowane dla Twoich potrzeb i ponieważ można bezpiecznie założyć, że napotkasz problemy związane z uprawnieniami potrzebnymi do korzystania z tych funkcji, możesz być w stanie obejść to wszystko, wracając do pierwszej sugestii (Aby się z tego wydostać, możesz, na końcu programu, utwórz pętlę, która wyświetla listę wszystkich aktywnych procesów i "zabij" proces "SLDWORKS.exe", ale zabij tylko proces, którego "MainWindowTitle" zawiera pewną wartość, wartość, którą możesz zdefiniować, tworząc na przykład pokój o "dziwnej" nazwie przed zabiciem tego procesu. Pozwala to na pozostanie przy prostym i bezpośrednim dostępie w system.diagnostic.process.
Pozdrowienia
1 polubienie