I am in need of some guidance on an application I'm creating. We have a
series of nightly jobs that are run by a dedicated machine using the Windows
Task Scheduler. These jobs span several projects, and perform a number of
different tasks. I've been working on an application that will manage all
of them via a pluggable architecture. I'm doing some testing, and I've run
into a problem.
The idea behind the architecture is that I have created a base Job class
that every job must inherit from. However, these jobs can be in any
assembly. The job engine is provided configuration files that point to the
assembly & class to use, along with some path information for assembly
searching - job assemblies are loaded into a separate AppDomain so I can
unload them when the engine is finished running them.
The issue is that this application will eventually be running from a network
drive. Since that's the "LocalIntranet" zone, what I'm attempting to do
isn't allowed. After doing some research, it appeared that the solution was
to sign my assemblies and create a custom code group for that signature.
The problem I see is that there's nothing guaranteeing that any external
assemblies containing jobs to run have been signed, much less with my
particular key file. The jobs may not be written by me, and I don't want to
pass around my key file to anyone who might create a job for my app.
Some investigation shows that there is an "Application Directory" condition,
and I have no problem telling job writers they have to store their jobs in a
subdirectory of my job application (which would seem to solve my problem,
since I can grant "FullTrust" to the appropriate directory.) But while I
understand how to set up the child code group, I don't see how to associate
it with my application out on the network.
I am a newbie in this area, so I'm quickly getting lost here. I can try to
push for my application to be installed locally on the scheduling machine,
but I don't think I can win that one. Even if I do, I can still see
potential problems loading an assembly from a network drive - a distinct
possibility.
Can anyone shed some light on my situation? What's the best/preferred
method of handling this? Or am I just heading down the wrong road, and need
to re-think things?
Any help would be *greatly* appreciated. Thanks!
- Scott