Question

Closing interop initiated application upon main app crash

Asked by: tmesias

I have an application that starts an instance of word, determines the handle of the window and then changes the parent application from the desktop to a panel in my application.  When my application is done with word, it resets the parent to the desktop and then closes (gracefully) the instance of word.

That works fine.

The problem is when for either because I am debugging another portion of the application, or because I forgot about a bug in the release, I have to terminate my application ungracefully (i.e. stop in the compiler) or even worse (gasp) taskmgr and stop process.

What I would like to see is that somehow my application send the word application object a {wordapplicationobject}.quit and set {wordapplicationobject = Nothing so that it terminates when my app crashes.

I think the simplest solution would be if VB.net has a way to run that certain code on crash, any crash, even when I press stop...

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2009-10-19 at 08:18:33ID24823805
Tags

Microsoft Office 2007 interop

Topics

.NET

,

Automation

,

Microsoft Word

Participating Experts
1
Points
250
Comments
7

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. VB.NET Com Interop & Inheritance
    I am relatively new to .net, been doing COM programming for a few years now though. I have been tasked with researching the ability of a current .NET app to be exposed to clients via COM Interop; The clients are coded in VB6. Anyhow; I am having pretty good luck with it thu...
  2. learning VB.net interop and understanding COM
    Hi, i need some reading materials or tutorials where i can read on vb.net interop and COM. Because i found that many API that i need to work with were written in C/C++ style. i am quite puzzled with the datatype LSTR and passing of pointers etc. thanks
  3. Dotfuscate - Interop
    I have a few .Net dll's that need to be shipped with our product. When I am fuscating the Interops I get this error Running C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\\bin\ildasm.exe /OUT=C:\Temp\\eBuilder.Interop.OdaX.dll.il /TEXT /NOBAR /RAWEH /QUOTEALLNA...
  4. Gracefully end a process with vb.net
    I know how to kill a process in vb.net. How do I gracefully close a program with vb.net? It should mimic the way a program closes when the user clicks the close button. I would prefer not to use any third party libraries. Thanks.

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: RolandDeschainPosted on 2009-10-19 at 08:33:02ID: 25606124

Well, I think you can use application events.

If you don't know, you can use a series of limited global application events for your .net windows forms applications. To use them in your application, follow this steps (sorry if some description of button text, or similar, is not exact, because my Visual Studio is not in english):

- Right-click project node on Solution Explorer, then click on Properties to view Properties window.
- In the first tab of properties window, named "Application", there's a button at the bottom of the window named "View application events" (or something similar, remember that my Visual Studio is not in english). Click on this button.
- A newly class is added to your project (ApplicationEvents.vb -well, I'm working with VB but I guess that it will be similar in C#, but with changed extension).
- Use the objects ComboBox to view events of MyApplication object. One of those events is UnhandledException.

This events raises up every time an unhandled exception throws in your app. Parameter "e" contains information about the exception, and the ability to cancel the application shutdown (with ExitApplication property). You can use this event to put your code to close word object properly.

Hope that helps.

 

by: tmesiasPosted on 2009-10-19 at 08:54:04ID: 25606360

That is too cool...  I suppose I need to make my word application object owned by the project rather than buried in a user control....  let me go wire that up and I will get back to you and let you know how it went.

 

by: tmesiasPosted on 2009-10-19 at 10:56:16ID: 25607411

I created s standalone class that instantiated the MS word and MS Project objects at program start.  I added the following code to the application events as follows:

        Private Sub MyApplication_UnhandledException(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException
            SetParent(hWndAdoptedWordApp, GetDesktopWindow)
            WordApp.Quit()
            WordApp = Nothing

            ProjectApp.Quit()
            ProjectApp = Nothing
        End Sub

However though this will work if there was an exception, If I or the user "terminated abnormally"  such as if I hit the stop button in the compiler, or the user hit taskmgr>End Process the code won't run.  Is there something like an AbnormalTermination Event on the application object?

Maybe run some kind of vb for apps code in each of the word and the project instances that checks to see if the main app is running every 10 seconds, and if not, then it kills the instance?

 

by: tmesiasPosted on 2009-10-19 at 10:58:30ID: 25607434

I hould also mention I did add the same code to the "shutdown" application event.  Under normal circumstances this works fine, however I'm looking for a way to clean things up in all cases.  (the 1% of the time an abnormal termination occurs either because of lack of good coding or because the user terminates using the taskmgr)

 

by: RolandDeschainPosted on 2009-10-19 at 14:10:02ID: 25609086

You can use the Shutdown event. Keep a global setting (for example, a Shared bololean variable in a class, defaulting to False) indicating when the user has exited normally (in that case, you know you've closed your COM objects the right way). In the Shutdown event, if that global setting is False, you know that you've got to close the COM objects.

Hope that helps.

 

by: tmesiasPosted on 2009-10-19 at 15:18:25ID: 25609495

wont the variable be destroyed if the application was sent a kill?  If not, where do I put the if bClosedNormally = false then wordapp.close code?

vs 2008 puts this comment at the top of the application event:


    ' The following events are availble for MyApplication:
    '
    ' Startup: Raised when the application starts, before the startup form is created.
    ' Shutdown: Raised after all application forms are closed.  This event is not raised if the application terminates abnormally.
    ' UnhandledException: Raised if the application encounters an unhandled exception.
    ' StartupNextInstance: Raised when launching a single-instance application and the application is already active.
    ' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected.


That seems to suggest that shutdown won't run if the app terminates abnormally.

Thanks for your help... we are 99% there with the current improvement, but I am still having to manually kill the two processes when I make another coding error and terminate the application with the "stop" button because the compiler won't let me make the particular change I want to make.

 

by: RolandDeschainPosted on 2009-10-19 at 23:39:33ID: 25611479

Mmm... unfortunately, I've been testing the workaround with bad results. When stopping compiler in Visual Studio, or when closing application terminating process with taskbar, none of the following events is raised:
- Form.Closing
- Form.Closed
- Form.HandleDestroyed
- Application.Shutdown

So I think is not possible to control all posibilities, unless you keep a completely external process (another application, maybe in background) monitoring your main application and closing COM objects if detects that main application has been closed but COM objects has been not.

Hope that helps.

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...