Re: A Very Troubled Application...

John Warner <[email protected]> Wed, 10 Jun 2009 14:41:53 -0400
Newsgroups gmane.comp.windows.devel.dotnet.advanced
Organization House
Message-ID <BE04F7CEEB554B1AAD09891D190B00E5@neptune>
I saw Word pop up in this thread, is it Word you are 'fighting' with or
some other program?


John Warner

-----Original Message-----
From: Discussion of advanced .NET topics.
[mailto:[email protected]] On Behalf Of Mike Andrews
Sent: Wednesday, June 10, 2009 2:16 PM
To: [email protected]
Subject: Re: [ADVANCED-DOTNET] A Very Troubled Application...

It's a stand-alone application and not a component but it does have a .NET
wrapped COM component that I'm using.
I'm not using a ThreadException as Peter suggested, but instead looking for
the exceptions that occur and then closing the executable  and AppDomain
and then restarting the application and AppDomain.  I'm also writing some
code to trap for random error dialogs thrown by the application.


On Wed, Jun 10, 2009 at 12:29 PM, Adam Tuliper
<[email protected]>wrote:

> Mike, this is indeed a component, and not a standalone application?
> if so did you try the ThreadException as Peter mentioned?
>
> On Wed, Jun 10, 2009 at 1:26 PM, Mike Andrews
> <[email protected]>wrote:
>
>  > Yes, I'd be curious as well as to how the system cleans up after a
> fault.
> >  I
> > know yesterday when I intentionally caused the app to crash numerous
> times
> > my system (Windows XP Pro) became unstable in that Explorer would
> > just randomly "hang" and not let you utilize the task bar; it was
ridiculous.
> >
> > I have a similar situation that I'm working on where instead of
> > using
> Word
> > I'm using some other 3rd party app that behaves very poorly but the
> > issue is moot since I must use it and must adapt it to be a "server"
> > non-user-monitored application.  I'm well on my way to it and I've
> > done a majority of the work but solving cases where the application
> > just fails
> is
> > a
> > very difficult endeavor.
> >
> > On Wed, Jun 10, 2009 at 11:22 AM, Adam Tuliper
> > <[email protected]
> > >wrote:
> >
> > > we had to do the same hacks for word.. using it as server side doc
> > > generation before good pdf components were available to us and I
> > > recall word would fail after a while. that goodness we've come a
> > > long way  : )
> > >
> > > For dlls being cleaned at termination time.. library code segments
> > > are shared between processes (that reference the same lib). So
> > > there is
> only
> > > one
> > > code section in memory (unless specifically designated otherwise I
> > > believe).
> > > When LoadLibrary is called, ref count is incremented. So when a
> > > process crashes.. how does the system know what to decrement
> > > counts for? I
> don't
> > > believe it does.. and hence a potential memory issue with crashed
> > > appliations leaving resources around.  If I'm not 100% correct on
> this..
> > I
> > > would like to know a reference to how the system cleans up.. Id be
> > curious
> > > of the inner workings, this is all from rusty memory.
> > >
> > >
> > >
> > >
> > >
> > > On Wed, Jun 10, 2009 at 2:01 AM, Peter vd Weerd
> > > <[email protected]>
> > wrote:
> > >
> > > > When windows terminates a process, all system-resources are
> > > > cleaned
> up.
> > > > Dll's too. They are loaded in the virtual address space, and the
> > address
> > > > space is removed at termination.
> > > > Reference counting on dll's is only within a process. AFAIK
> > > > there is
> no
> > > > system-wide refcnt.
> > > >
> > > > Dll's are loaded by creating a named filemapping to this dll.
> > > > This
> > > mapping
> > > > is a normal system resource and will be freed at termination time.
> > > >
> > > > Out of process COM objects are a different story. The process
> > > > where
> > this
> > > > COM-object lives has nothing to do with the hosting process (as
> > > > far
> as
> > > the
> > > > system knowns). And it is refcnted.
> > > >
> > > > So if the host process is getting terminated, the only way for
> > > > the
> COM
> > > > process to get auto terminated is to do a watchdog check on its
> > > > host
> if
> > > its
> > > > still alive. There are some watchdog checks in the standard
> marshalling
> > > code
> > > > (hartbeats), but I'm not sure if they are used for terminating
> > > > the
> > > process
> > > > with the COM object. Another question is how big the timeout for
> > > > this watchdog is. So may be you want to restart the COM object
> > > > before the watchdog timed out.
> > > >
> > > > I used my proposed solution (restarting the process after
> > > > failure) a
> > few
> > > > times in case of untrusted applications, and it worked fine. I
> > > > can
> > > remember
> > > > problems with MSWord (out of process COM) years ago. After
> > > > failure
> (the
> > > > process using MSWord died) I killed the MSWord instance too and
> > > > than restarted my application. Ugly, but it worked.
> > > > I had more problems there, because word was not designed as a
> service.
> > > Its
> > > > a UI, so it will popup a dialog every now and than. I had to
'answer'
> > > those
> > > > dialogs too :-)
> > > >
> > > > /Peter
> > > > ----- Original Message ----- From: "Adam Tuliper" <
> > > [email protected]>
> > > > To: <[email protected]>
> > > > Sent: Tuesday, June 09, 2009 10:30 PM
> > > > Subject: Re: [ADVANCED-DOTNET] A Very Troubled Application...
> > > >
> > > >
> > > >
> > > >  I seem to recall the opposite was true.. Windows isn't very
> > > > good
> about
> > > >> cleaning up resources (at least in the past) because of the way
> > > libraries
> > > >> dont get freed because the reference count handling is never
> > executed..
> > > >> something along those lines. Although if someone can provide
> > > >> some
> more
> > > >> technical reference on if this is true or not.. Id love to read
it.
> > > >>
> > > >>
> > > >>
> > > >> On Tue, Jun 9, 2009 at 1:00 PM, Peter vd Weerd
> > > >> <[email protected]>
> > > wrote:
> > > >>
> > > >>  Mike,
> > > >>>
> > > >>> In general: if you have access violations caused by
> > > >>> COM-components,
> > its
> > > >>> not
> > > >>> a good idea to recover from that.
> > > >>> If you can isolate the complete application to a kind of a
> > > >>> worker-process, you write a controller-program that starts
> > > >>> this worker-process, and
> > if
> > > it
> > > >>> fails, just start a new one.
> > > >>>
> > > >>> Windows is very good in recovering from crashed processes: all
> > > resources
> > > >>> are freed. So, when the controller process fires up a new
> > > worker-process
> > > >>> its
> > > >>> a brand new one with clean memory, a clean .NET virtual
> > > >>> machine,
> etc.
> > > >>>
> > > >>> /Peter
> > > >>>
> > > >>>
> > > >>> ----- Original Message ----- From: "Mike Andrews" <
> > > >>> [email protected]>
> > > >>> To: <[email protected]>
> > > >>> Sent: Tuesday, June 09, 2009 6:06 PM
> > > >>> Subject: [ADVANCED-DOTNET] A Very Troubled Application...
> > > >>>
> > > >>>
> > > >>>
> > > >>> I have a very troubled application (not mine but a 3rd party)
> > > >>> that
> > > likes
> > > >>> to
> > > >>>
> > > >>>> fail with various Unhandled exceptions (memory access and
> > > >>>> others)
> > when
> > > >>>> certain files are loaded (I have no idea of the reason).
>  Sometimes
> > > >>>> loading
> > > >>>> a file causes a COM exception to occur (no one knows why and
> > > >>>> it's
> > very
> > > >>>> unlikely that the manufacturer will ever fix it).  This
> > > >>>> causes the entire application to crash (and/or provide some
> > > >>>> other unpredictable
> > > behavior).
> > > >>>> This does not occur most of the time but only occasionally.
>  However
> > I
> > > >>>> must
> > > >>>> account for these eventualities as this process will be
> > > >>>> running on multiple servers and I need it the most stable I
> > > >>>> can get it.
> > > >>>>
> > > >>>> What I have been doing is looking for the process in the
> > > >>>> process
> > list
> > > >>>> and
> > > >>>> then killing it.  That works most of the time but when one of
> those
> > > >>>> dialogs
> > > >>>> is thrown up asking you to click OK it really messes things up.
> >  I've
> > > >>>> started looking for the dialog, but the time when the dialog
> appears
> > > >>>> varies
> > > >>>> so any predictability is out.
> > > >>>>
> > > >>>> What I need to know is if it's possible to attach a hook (or
> > > >>>> some
> > > other
> > > >>>> such
> > > >>>> mechanism) to the window to intercept any unhandled win32
> exceptions
> > > >>>> similar
> > > >>>> to the capability available in the .NET framework.  I'm at my
> wit's
> > > end
> > > >>>> here
> > > >>>> on this one.  I need to create something stable enough so I
> > > >>>> can
> > > recover
> > > >>>> on
> > > >>>> the server and continue.
> > > >>>>
> > > >>>> Any help or information would be most appreciated.
> > > >>>>
> > > >>>> Thanks,
> > > >>>> Mike
> > > >>>>
> > > >>>> ===================================
> > > >>>> View archives and manage your subscription(s) at
> > > >>>> http://peach.ease.lsoft.com/archives
> > > >>>>
> > > >>>>
> > > >>>>  ===================================
> > > >>> View archives and manage your subscription(s) at
> > > >>> http://peach.ease.lsoft.com/archives
> > > >>>
> > > >>>
> > > >> ===================================
> > > >> View archives and manage your subscription(s) at
> > > >> http://peach.ease.lsoft.com/archives
> > > >>
> > > >>
> > > > ===================================
> > > > View archives and manage your subscription(s) at
> > > > http://peach.ease.lsoft.com/archives
> > > >
> > >
> > > ===================================
> > > View archives and manage your subscription(s) at
> > > http://peach.ease.lsoft.com/archives
> > >
> >
> > ===================================
> > View archives and manage your subscription(s) at
> > http://peach.ease.lsoft.com/archives
> >
>
> ===================================
> View archives and manage your subscription(s) at
> http://peach.ease.lsoft.com/archives
>

===================================
View archives and manage your subscription(s) at
http://peach.ease.lsoft.com/archives

===================================
View archives and manage your subscription(s) at http://peach.ease.lsoft.com/archives