Re: multi-process singleton DLL
"PaulH" <paul.heil@gmail.com> wrote in message
news:1185210047.440472.182490@g4g2000hsf.googlegroups.com...
Instead of using IPC, wouldn't it be possible to use DuplicateHandle()
such that ProcessA opens the DLL and gets the original resource
handle, then Process B opens the DLL and gets a DuplicateHandle()?
I'm glad you mentioned the second process. I didn't consider what
would happen to Process B if Process A closed the resource. What about
using the DLL to keep a reference count of all the handles created,
then it could wait for the reference to become 0 before it really
releases the resource. Would that work?
What if I call TerminateProcess on process A? (Perhaps via Task Manager ->
End Process) Then
(1) Your cleanup code in process A won't run.
(2) Any resources owned by process A get freed by Windows.
I'm not sure, maybe DuplicateHandle fixes problem #2. #1 is still going to
be a big problem. Even to call DuplicateHandle the second process needs a
handle to the first, and the value of the resource handle inside the first
process. This is non-trivial when the first process quits. Then you have
to replace the shared data with another process's copy of the handle...
you're going to need shared segments and cross-process (named) mutexes to
synchronize access to the shared data. Probably easier to just go with a
named pipe.