Solved

Strange Problem getting Excel Process To Quit`

Posted on 2006-07-12
6
552 Views
Last Modified: 2008-01-09
Hello,

I am working on an application that converts a set of .CSV files to a .XLS workbook.  It does this by opening the first csv with Excel, and then opening each additional .CSV and moving it into the existing workbook.  The problem that I am having is that after the conversion is done, and all Excel objects are released, the Excel process stays running.  Below are some sections of my code.

Excel.Application excelApp = new Excel.Application();

Excel.Workbook workbook;
Excel.Workbooks workbooks;
Excel.Workbooks tempWorkbooks;

workbooks = (Excel.Workbooks)excelApp.Workbooks;
tempWorkbooks = (Excel.Workbooks)excelApp.Workbooks;

// Open the text file in Excel.
workbooks._OpenText(sourcePath, Excel.XlPlatform.xlWindows, 1,
      Excel.XlTextParsingType.xlDelimited, Excel.XlTextQualifier.xlTextQualifierDoubleQuote,
      false, true, false, false, false, false, missingParameter, missingParameter,
      missingParameter, missingParameter, missingParameter);


workbook = excelApp.Workbooks[1];

for (int i = 2; i <= fileCount; i++)
{
   tempWorkbooks._OpenText(sourcePath + fileBase + i.ToString() + CSVExtension, Excel.XlPlatform.xlWindows, 1,                  Excel.XlTextParsingType.xlDelimited,Excel.XlTextQualifier.xlTextQualifierDoubleQuote,
      false, true, false, false, false, false, missingParameter, missingParameter,missingParameter,  missingParameter,missingParameter);
                              
                                    
//move the opened sheet to the main WB
((Excel.Worksheet)excelApp.Workbooks[2].Worksheets[1]).Move(Type.Missing, excelApp.Workbooks[1].Worksheets[excelApp.Workbooks[1].Worksheets.Count]);
}

I have read several posts and have tried every method for releasing the COM objects.  What is really strange is that everything works fine and the process is killed if I have the above for loop commented out.  This makes it seem like it is a problem in one of 2 the function calls under the for loop, but it will fail regardless of whether the code in the for loop is executed.  For example, if there is only one .csv file, the for loop will not execute, but the process will stay running.  In the same scenario with the loop commented out, the process dies.

?????
Thanks,
Tim
0
Comment
Question by:Tim_Heldberg
  • 4
  • 2
6 Comments
 
LVL 96

Expert Comment

by:Bob Learned
ID: 17093242
// Tell COM to release resources.
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks);
System.Runtime.InteropServices.Marshal.ReleaseComObject(tempWorkbooks);

// Force garbage collection
GC.Collect();

Bob
0
 
LVL 96

Expert Comment

by:Bob Learned
ID: 17093257
Oops, almost forgot:

// Close the application
excelApp.Quit();

// Tell COM to release resources.
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks);
System.Runtime.InteropServices.Marshal.ReleaseComObject(tempWorkbooks);

// Force garbage collection
GC.Collect();

Bob
0
 
LVL 4

Author Comment

by:Tim_Heldberg
ID: 17093402
I actually did try that.  Here is my COM release code

workbook.Close(false, missingParameter, missingParameter);

excelApp.Quit();
workbooks.Close();

while (System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook) > 0) { }
while(System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks)>0){}
while(System.Runtime.InteropServices.Marshal.ReleaseComObject(tempWorkbooks)>0){}
while (System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp) > 0) { }
                        
GC.Collect();
0
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.

 
LVL 96

Accepted Solution

by:
Bob Learned earned 500 total points
ID: 17093703
Yeah, didn't notice the remark in the question body.  Sounds like some resource is being still not being released, but I can't see what that would be.  It might be something internal to the _OpenText call.

Bob
0
 
LVL 4

Author Comment

by:Tim_Heldberg
ID: 17093760
Well, I was able to figure it out, although it really doesnt seem like much of a fix.  I moved that for loop in question to a seperate function and it worked perfectly.  So strange.  Any idea why that would make a difference?
0
 
LVL 96

Expert Comment

by:Bob Learned
ID: 17093815
Which function?  The class destructor?

Bob
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
Data Saving(2) 2 41
Why don't I see this table in EDMX file? 2 23
Vb.net dynamic formulas in runtime 11 61
Entity Framework 7 30
Introduction This article series is supposed to shed some light on the use of IDisposable and objects that inherit from it. In essence, a more apt title for this article would be: using (IDisposable) {}. I’m just not sure how many people would ge…
Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
Internet Business Fax to Email Made Easy - With  eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, f…
With the power of JIRA, there's an unlimited number of ways you can customize it, use it and benefit from it. With that in mind, there's bound to be things that I wasn't able to cover in this course. With this summary we'll look at some places to go…

912 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

21 Experts available now in Live!

Get 1:1 Help Now