Solved

VB6 application's process continues running after application closes

Posted on 2008-10-30
4
691 Views
Last Modified: 2013-12-26
My VB6 application continues to run indefinitely as a process after the application closes.  The phantom process uses 0 cpu but it takes up memory and ties up the .exe file as being in-use.  The task manager doesn't show it listed as applications but it does show it in the process list.

I added "EndProcess(function shown below) programname.exe" at the start of the program to kill any processes leftover from any previous executions.  Prior to that line of code, more and more phantom processes would appear in the process list each time the program ran. This line of code prevents the accumulation of phantom processes but I still can't get rid of the process that remains after the program finishes.  This problem only occurs when running the .exe.  When I run it in the IDE, it doesn't leave any processes running after it ends.

It looks to me through tracing in the IDE and msgboxes that all of the forms are being unloaded.  Shouldn't that clear out all of the memory and kill the application and process when the final form is unloaded?  I dynamically create a few controls while the program is running, are they removed from memory when the form is unloaded?  I also define some variables as public in a module.  Are the module's variables removed from memory when the final form is unloaded?  How can I determine what is remaining resident in memory after the program runs?  

Public Function EndProcess(ByVal sExeName As String) As Boolean

' This works at the beginning of the program to end any processes that are still running since the last time this program ran

   On Error GoTo Err_Handler  

   Dim oProcessCollection, oProcess, ok, ii

   Set oProcessCollection = GetObject("WinMgmts:").ExecQuery("SELECT * FROM Win32_Process WHERE Name = '" & sExeName & "'")   

   ii = oProcessCollection.Count

   Debug.Print "Total: " & ii   

   If oProcessCollection.Count > 1 Then

      For Each oProcess In oProcessCollection

         ok = (oProcess.Terminate = 0)

         If ok Then

            ii = ii - 1

            Debug.Print "Count: " & ii

            If ii = 1 Then

               Exit For

            End If

         End If

      Next

   End If   

   Exit Function

Err_Handler:

   Debug.Print Err.Description

   EndProcess = False

End Function

Open in new window

0
Comment
Question by:SteveQ2
4 Comments
 
LVL 85

Expert Comment

by:Mike Tomlinson
ID: 22843584
Do you have any "infinite processing loops" in your app with DoEvents() within to keep the app responsive?

What does your app do?
0
 
LVL 2

Expert Comment

by:vbsquickresponse
ID: 22843628
This generally happen when unhandled object exists in memory, cause program not to terminate properly....

I suggest you to check if any - late binding object in project are handled properly? Or any form object not closed before user try to close application!

-------------
 I dynamically create a few controls while the program is running, are they removed from memory when the form is unloaded?   - Yes
I also define some variables as public in a module.  Are the module's variables removed from memory when the final form is unloaded?  - Yes
0
 
LVL 10

Accepted Solution

by:
peetm earned 500 total points
ID: 22844343
Not a 'debug', but you could just call 'End' in the main form's Unload event!
0
 

Author Closing Comment

by:SteveQ2
ID: 31511772
I would love to know what is really causing the leftover process after the program finishes; but your suggestion seems to be a good quick fix.  Thank you.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
DIR issue 7 50
Validating VB6 Function 19 56
I need help formating a date variable in my VB.Net application 2 44
Updates not working for MS Windows 7 12 152
The debugging module of the VB 6 IDE can be accessed by way of the Debug menu item. That menu item can normally be found in the IDE's main menu line as shown in this picture.   There is also a companion Debug Toolbar that looks like the followin…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…

929 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now