Re: A Very Troubled Application...

Mike Andrews <[email protected]> Tue, 9 Jun 2009 13:57:37 -0500
Newsgroups gmane.comp.windows.devel.dotnet.advanced
Message-ID <[email protected]>
Normally I would agree with you but I'm not sure how I can do this.
The real problem is that I need to create the COM object in my primary .net
assembly (the assembly that handles the necessary method calls to the COM
object to do the work I need done).  The COM object then instantiates the
executable.  (It's not fun to work with let me tell you...)

I can do as you suggest, but only my primary .net assembly will utilize the
COM object and that's where the COMException will occur and then I have no
control over when it crashes.  Are you suggesting that I create a secondary
assembly that wraps the COM object and that that assembly works with the COM
object and then I can isolate the COM that way and then I utilize my
secondary assembly within my primary assembly?  Also, how can I fix the
random behavior exhibited when the application crashes such as an Access
Violation which results in a dialog?
I really appreciate the help.

Thanks,
Mike

On Tue, Jun 9, 2009 at 1:42 PM, Peter vd Weerd <[email protected]> wrote:

> Hi Mike,
>
> Because you use COM-components, and because you don't trust them, creating
> a separate AppDomain (.NET's notion of a process) is less robust than a
> separate process. A failing COM-component is able to corrupt the memory that
> is used by the .Net VM. Even memory that is used by a different AppDomain.
>
> Yes, I propose to create an application wrapper, that does nothing more
> than spawning your original application, and wait for it. If it ends (by a
> crash), just spawn it again.
> To discriminate between a crash and a normal end, return a special non-zero
> returncode from your original application. For instance 123. Of course both
> the wrapper and the original app should agree on this value.
>
> The fact that your primary application can be spawned only once doesn't
> feel like a problem: the application wrapper will only spawn a new one if
> the previous instance failed...
>
> /Peter
>
>
>
> ----- Original Message ----- From: "Mike Andrews" <
> [email protected]>
> To: <[email protected]>
> Sent: Tuesday, June 09, 2009 7:08 PM
> Subject: Re: [ADVANCED-DOTNET] A Very Troubled Application...
>
>
>
> Hi Peter,
>>
>> Thanks for the reply.
>>
>> Right now I'm creating a separate AppDomain and instantiating my Wrapper
>> object (which wraps all of the COM method calls because any method call
>> can
>> cause a COM exception) inside that AppDomain.  Another problem with this
>> process is that it only allows one instance at a time (by reading the
>> process list and seeing if it's already there and if it is it throws up
>> another dialog).
>>
>> I'm not sure what you mean by creating a worker-process.  Would I create
>> an
>> application wrapper that then spawns the primary application?  If the
>> primary application fails would the worker-process fail or would I just
>> attempt to restart it?
>>
>> Thanks,
>> Mike
>>
>> On Tue, Jun 9, 2009 at 12: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