Re: A Very Troubled Application...

Mike Andrews <[email protected]> Wed, 10 Jun 2009 13:45:19 -0500
Newsgroups gmane.comp.windows.devel.dotnet.advanced
Message-ID <[email protected]>
It's some other application.

On Wed, Jun 10, 2009 at 1:41 PM, John Warner <[email protected]> wrote:

> 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
>

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