Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 8
Default Excel References Not Release When IDTExtensibility2 Used

My C# add-in implements IDTExtensibility2. As long as I don't sync my
add-in to any Excel events, it works perfectly and the Excel instance
is removed when Excel is shut down.

However, my add-in must listen to some Excel events. I hook them up
during OnConnection, like so (using any of the Excel Workbook events
gives the same problem):
applicationObject.WorkbookOpen += new
Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen);
Once I add this line of code, the Excel instance sticks around, even
after Excel is terminated and released. Removing the delegate from
the event (and releaseing the COM reference) in the OnDisconnection
method does not help.

Using .Net 2.0 and the issue exists with at least Office XP and 2003.

The code used to test the creation and release of the Excel instance
is he
Sub Test()
Set oXL = CreateObject("Excel.Application")
Set WBs = oXL.Workbooks
Set Wkbk = WBs.Add
Set Wkbk = Nothing
Set WBs = Nothing
oXL.Quit
Set oXL = Nothing
End Sub

  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 9,101
Default Excel References Not Release When IDTExtensibility2 Used

You need to close your workbook. Not sure if youwill get an error with
savechanges. My need to eliminate Savechanges.

Sub Test()
Set oXL = CreateObject("Excel.Application")
Set WBs = oXL.Workbooks
Set Wkbk = WBs.Add
Wkbk.Close savechanges:=False
Set Wkbk = Nothing
Set WBs = Nothing
oXL.Quit
Set oXL = Nothing
End Sub




" wrote:

My C# add-in implements IDTExtensibility2. As long as I don't sync my
add-in to any Excel events, it works perfectly and the Excel instance
is removed when Excel is shut down.

However, my add-in must listen to some Excel events. I hook them up
during OnConnection, like so (using any of the Excel Workbook events
gives the same problem):
applicationObject.WorkbookOpen += new
Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen);
Once I add this line of code, the Excel instance sticks around, even
after Excel is terminated and released. Removing the delegate from
the event (and releaseing the COM reference) in the OnDisconnection
method does not help.

Using .Net 2.0 and the issue exists with at least Office XP and 2003.

The code used to test the creation and release of the Excel instance
is he
Sub Test()
Set oXL = CreateObject("Excel.Application")
Set WBs = oXL.Workbooks
Set Wkbk = WBs.Add
Set Wkbk = Nothing
Set WBs = Nothing
oXL.Quit
Set oXL = Nothing
End Sub


  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 8
Default Excel References Not Release When IDTExtensibility2 Used

On Sep 17, 10:21*am, Joel wrote:
You need to close your workbook. *Not sure if youwill get an error with
savechanges. *My need to eliminate Savechanges.

Sub Test()
* * Set oXL = CreateObject("Excel.Application")
* * Set WBs = oXL.Workbooks
* * Set Wkbk = WBs.Add
* * Wkbk.Close savechanges:=False
* * Set Wkbk = Nothing
* * Set WBs = Nothing
* * oXL.Quit
* * Set oXL = Nothing
End Sub

" wrote:
My C# add-in implements IDTExtensibility2. *As long as I don't sync my
add-in to any Excel events, it works perfectly and the Excel instance
is removed when Excel is shut down.


However, my add-in must listen to some Excel events. I hook them up
during OnConnection, like so (using any of the Excel Workbook events
gives the same problem):
applicationObject.WorkbookOpen += new
Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen);
Once I add this line of code, the Excel instance sticks around, even
after Excel is terminated and released. *Removing the delegate from
the event (and releaseing the COM reference) in the OnDisconnection
method does not help.


Using .Net 2.0 and the issue exists with at least Office XP and 2003.


The code used to test the creation and release of the Excel instance
is he
Sub Test()
* * Set oXL = CreateObject("Excel.Application")
* * Set WBs = oXL.Workbooks
* * Set Wkbk = WBs.Add
* * Set Wkbk = Nothing
* * Set WBs = Nothing
* * oXL.Quit
* * Set oXL = Nothing
End Sub


Joel - that makes no difference. The instance of Excel disappears
correctly as long as I don't connect to any Excel events in the
OnConnection method. The VB is fine.
  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 9,101
Default Excel References Not Release When IDTExtensibility2 Used

When you open an event it returns the Process ID number. You need to KILL
that process. Not sure the format of the instructions.

You Should be able to do something like this

ProcID =
Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen);

The ProcID will be the same number that you would see in the Task Manager.
If you don't see the PROCID in the task manager you need to add a column in
the Menu View - Select Columns


" wrote:

On Sep 17, 10:21 am, Joel wrote:
You need to close your workbook. Not sure if youwill get an error with
savechanges. My need to eliminate Savechanges.

Sub Test()
Set oXL = CreateObject("Excel.Application")
Set WBs = oXL.Workbooks
Set Wkbk = WBs.Add
Wkbk.Close savechanges:=False
Set Wkbk = Nothing
Set WBs = Nothing
oXL.Quit
Set oXL = Nothing
End Sub

" wrote:
My C# add-in implements IDTExtensibility2. As long as I don't sync my
add-in to any Excel events, it works perfectly and the Excel instance
is removed when Excel is shut down.


However, my add-in must listen to some Excel events. I hook them up
during OnConnection, like so (using any of the Excel Workbook events
gives the same problem):
applicationObject.WorkbookOpen += new
Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen);
Once I add this line of code, the Excel instance sticks around, even
after Excel is terminated and released. Removing the delegate from
the event (and releaseing the COM reference) in the OnDisconnection
method does not help.


Using .Net 2.0 and the issue exists with at least Office XP and 2003.


The code used to test the creation and release of the Excel instance
is he
Sub Test()
Set oXL = CreateObject("Excel.Application")
Set WBs = oXL.Workbooks
Set Wkbk = WBs.Add
Set Wkbk = Nothing
Set WBs = Nothing
oXL.Quit
Set oXL = Nothing
End Sub


Joel - that makes no difference. The instance of Excel disappears
correctly as long as I don't connect to any Excel events in the
OnConnection method. The VB is fine.

  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 8
Default Excel References Not Release When IDTExtensibility2 Used

Joel - I'm not sure I understand your last post - see he it seems
an event handler is what gets returned, not a ProcID.

Excel.AppEvents_SheetSelectionChangeEventHandler
EventDel_SheetSelectionChange;

OnConnection(...){
EventDel_SheetSelectionChange = new
AppEvents_SheetSelectionChangeEventHandler(API.App lication_SheetSelectionChange);
m_Excel.SheetSelectionChange += EventDel_SheetSelectionChange;
}

OnDisconnection(...){
m_Excel.SheetSelectionChange -= EventDel_SheetSelectionChange;
Marshal.ReleaseComObject(EventDel_SheetSelectionCh ange);
EventDel_SheetSelectionChange = null;
}




On Sep 17, 10:52*am, Joel wrote:
When you open an event it returns the Process ID number. *You need to KILL
that process. *Not sure the format of the instructions.

You Should be able to do something like this

ProcID =
Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen);

The ProcID will be the same number that you would see in the Task Manager.. *
If you don't see the PROCID in the task manager you need to add a column in
the Menu View - Select Columns

" wrote:
On Sep 17, 10:21 am, Joel wrote:
You need to close your workbook. *Not sure if youwill get an error with
savechanges. *My need to eliminate Savechanges.


Sub Test()
* * Set oXL = CreateObject("Excel.Application")
* * Set WBs = oXL.Workbooks
* * Set Wkbk = WBs.Add
* * Wkbk.Close savechanges:=False
* * Set Wkbk = Nothing
* * Set WBs = Nothing
* * oXL.Quit
* * Set oXL = Nothing
End Sub


" wrote:
My C# add-in implements IDTExtensibility2. *As long as I don't sync my
add-in to any Excel events, it works perfectly and the Excel instance
is removed when Excel is shut down.


However, my add-in must listen to some Excel events. I hook them up
during OnConnection, like so (using any of the Excel Workbook events
gives the same problem):
applicationObject.WorkbookOpen += new
Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen);
Once I add this line of code, the Excel instance sticks around, even
after Excel is terminated and released. *Removing the delegate from
the event (and releaseing the COM reference) in the OnDisconnection
method does not help.


Using .Net 2.0 and the issue exists with at least Office XP and 2003.


The code used to test the creation and release of the Excel instance
is he
Sub Test()
* * Set oXL = CreateObject("Excel.Application")
* * Set WBs = oXL.Workbooks
* * Set Wkbk = WBs.Add
* * Set Wkbk = Nothing
* * Set WBs = Nothing
* * oXL.Quit
* * Set oXL = Nothing
End Sub


Joel - that makes no difference. *The instance of Excel disappears
correctly as long as I don't connect to any Excel events in the
OnConnection method. *The VB is fine.




  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 8
Default Excel References Not Release When IDTExtensibility2 Used

Joel - Certainly killing the process would stop it from hanging
around, but that hardly is a proper solution - if the process goes
away by itself so long as I don't hook into an Excel application
event, then clearly there is something that needs to be released
related to the evtn handling that would produce the same result.
Killing the process when teh add-in is disconnected is incredibly
dangerous; for example, what if the user just wishes to remove that
add-in, but keep Excel open?

On Sep 17, 10:52*am, Joel wrote:
When you open an event it returns the Process ID number. *You need to KILL
that process. *Not sure the format of the instructions.

You Should be able to do something like this

ProcID =
Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen);

The ProcID will be the same number that you would see in the Task Manager.. *
If you don't see the PROCID in the task manager you need to add a column in
the Menu View - Select Columns

" wrote:
On Sep 17, 10:21 am, Joel wrote:
You need to close your workbook. *Not sure if youwill get an error with
savechanges. *My need to eliminate Savechanges.


Sub Test()
* * Set oXL = CreateObject("Excel.Application")
* * Set WBs = oXL.Workbooks
* * Set Wkbk = WBs.Add
* * Wkbk.Close savechanges:=False
* * Set Wkbk = Nothing
* * Set WBs = Nothing
* * oXL.Quit
* * Set oXL = Nothing
End Sub


" wrote:
My C# add-in implements IDTExtensibility2. *As long as I don't sync my
add-in to any Excel events, it works perfectly and the Excel instance
is removed when Excel is shut down.


However, my add-in must listen to some Excel events. I hook them up
during OnConnection, like so (using any of the Excel Workbook events
gives the same problem):
applicationObject.WorkbookOpen += new
Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen);
Once I add this line of code, the Excel instance sticks around, even
after Excel is terminated and released. *Removing the delegate from
the event (and releaseing the COM reference) in the OnDisconnection
method does not help.


Using .Net 2.0 and the issue exists with at least Office XP and 2003.


The code used to test the creation and release of the Excel instance
is he
Sub Test()
* * Set oXL = CreateObject("Excel.Application")
* * Set WBs = oXL.Workbooks
* * Set Wkbk = WBs.Add
* * Set Wkbk = Nothing
* * Set WBs = Nothing
* * oXL.Quit
* * Set oXL = Nothing
End Sub


Joel - that makes no difference. *The instance of Excel disappears
correctly as long as I don't connect to any Excel events in the
OnConnection method. *The VB is fine.


  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 9,101
Default Excel References Not Release When IDTExtensibility2 Used

You need to use CloseEvent and pass it the Handle Number.

" wrote:

Joel - Certainly killing the process would stop it from hanging
around, but that hardly is a proper solution - if the process goes
away by itself so long as I don't hook into an Excel application
event, then clearly there is something that needs to be released
related to the evtn handling that would produce the same result.
Killing the process when teh add-in is disconnected is incredibly
dangerous; for example, what if the user just wishes to remove that
add-in, but keep Excel open?

On Sep 17, 10:52 am, Joel wrote:
When you open an event it returns the Process ID number. You need to KILL
that process. Not sure the format of the instructions.

You Should be able to do something like this

ProcID =
Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen);

The ProcID will be the same number that you would see in the Task Manager..
If you don't see the PROCID in the task manager you need to add a column in
the Menu View - Select Columns

" wrote:
On Sep 17, 10:21 am, Joel wrote:
You need to close your workbook. Not sure if youwill get an error with
savechanges. My need to eliminate Savechanges.


Sub Test()
Set oXL = CreateObject("Excel.Application")
Set WBs = oXL.Workbooks
Set Wkbk = WBs.Add
Wkbk.Close savechanges:=False
Set Wkbk = Nothing
Set WBs = Nothing
oXL.Quit
Set oXL = Nothing
End Sub


" wrote:
My C# add-in implements IDTExtensibility2. As long as I don't sync my
add-in to any Excel events, it works perfectly and the Excel instance
is removed when Excel is shut down.


However, my add-in must listen to some Excel events. I hook them up
during OnConnection, like so (using any of the Excel Workbook events
gives the same problem):
applicationObject.WorkbookOpen += new
Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen);
Once I add this line of code, the Excel instance sticks around, even
after Excel is terminated and released. Removing the delegate from
the event (and releaseing the COM reference) in the OnDisconnection
method does not help.


Using .Net 2.0 and the issue exists with at least Office XP and 2003.


The code used to test the creation and release of the Excel instance
is he
Sub Test()
Set oXL = CreateObject("Excel.Application")
Set WBs = oXL.Workbooks
Set Wkbk = WBs.Add
Set Wkbk = Nothing
Set WBs = Nothing
oXL.Quit
Set oXL = Nothing
End Sub


Joel - that makes no difference. The instance of Excel disappears
correctly as long as I don't connect to any Excel events in the
OnConnection method. The VB is fine.



  #8   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,600
Default Excel References Not Release When IDTExtensibility2 Used

I don't know C# but I'd look further into this bit

Removing the delegate from the event
(and releaseing the COM reference) in the OnDisconnection
method does not help.


maybe you have more than one reference that you have not released (not
necessarily the app)

Regards,
Peter T


wrote in message
...
My C# add-in implements IDTExtensibility2. As long as I don't sync my
add-in to any Excel events, it works perfectly and the Excel instance
is removed when Excel is shut down.

However, my add-in must listen to some Excel events. I hook them up
during OnConnection, like so (using any of the Excel Workbook events
gives the same problem):
applicationObject.WorkbookOpen += new
Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen);
Once I add this line of code, the Excel instance sticks around, even
after Excel is terminated and released. Removing the delegate from
the event (and releaseing the COM reference) in the OnDisconnection
method does not help.

Using .Net 2.0 and the issue exists with at least Office XP and 2003.

The code used to test the creation and release of the Excel instance
is he
Sub Test()
Set oXL = CreateObject("Excel.Application")
Set WBs = oXL.Workbooks
Set Wkbk = WBs.Add
Set Wkbk = Nothing
Set WBs = Nothing
oXL.Quit
Set oXL = Nothing
End Sub



  #9   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 8
Default Excel References Not Release When IDTExtensibility2 Used

Peter - I agree that, in theory that would be causing the problem; I
just don't know what I could do differently in my code - again, here
are the code snippets:
Excel.AppEvents_SheetSelectionChangeEventHandler
EventDel_SheetSelectionChange;

OnConnection(...){
EventDel_SheetSelectionChange = new
AppEvents_SheetSelectionChangeEventHandler(API.App lication_SheetSelectionChange);
m_Excel.SheetSelectionChange += EventDel_SheetSelectionChange;
}

OnDisconnection(...){
m_Excel.SheetSelectionChange -= EventDel_SheetSelectionChange;
Marshal.ReleaseComObject(EventDel_SheetSelectionCh ange);
EventDel_SheetSelectionChange = null;
}





On Sep 17, 3:55*pm, "Peter T" <peter_t@discussions wrote:
I don't know C# but I'd look further into this bit

Removing the delegate from the event
(and releaseing the COM reference) in the OnDisconnection
method does not help.


maybe you have more than one reference that you have not released (not
necessarily the app)

Regards,
Peter T

wrote in message

...

My C# add-in implements IDTExtensibility2. *As long as I don't sync my
add-in to any Excel events, it works perfectly and the Excel instance
is removed when Excel is shut down.


However, my add-in must listen to some Excel events. I hook them up
during OnConnection, like so (using any of the Excel Workbook events
gives the same problem):
applicationObject.WorkbookOpen += new
Microsoft.Office.Interop.Excel.AppEvents_WorkbookO penEventHandler(applicationObject_WorkbookOpen);
Once I add this line of code, the Excel instance sticks around, even
after Excel is terminated and released. *Removing the delegate from
the event (and releaseing the COM reference) in the OnDisconnection
method does not help.


Using .Net 2.0 and the issue exists with at least Office XP and 2003.


The code used to test the creation and release of the Excel instance
is he
Sub Test()
* *Set oXL = CreateObject("Excel.Application")
* *Set WBs = oXL.Workbooks
* *Set Wkbk = WBs.Add
* *Set Wkbk = Nothing
* *Set WBs = Nothing
* *oXL.Quit
* *Set oXL = Nothing
End Sub


Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Add-in with IDTExtensibility2 and worksheet formulae Lars[_4_] Excel Programming 2 June 25th 07 12:43 PM
Excel 12 New Release Bart Vwb Excel Discussion (Misc queries) 5 October 4th 05 10:07 PM
IDTExtensibility2 kt Excel Programming 0 June 2nd 05 05:28 AM
IDTExtensibility2.OnConnection Event Mircea Pleteriu[_2_] Excel Programming 2 March 18th 05 02:36 AM
How to release the EXCEL.EXE procedure? Serge[_2_] Excel Programming 0 September 23rd 03 05:12 PM


All times are GMT +1. The time now is 02:40 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"