Hello all,
I've looked through this newsgroup and saw lots of questions about running
an application from a network drive or a local network. I know that when you
do this, it puts the assembly into a different "zone" of trust which is more
restrictive.
In my situation this is a good thing. We don't want to allow our application
to be run over the network and want to force them to install it (and buy it)
on each local machine. The problem I'm having is that when you attempt to
run it off the network drive, it dies on you and you get a
System.Security.SecurityException unhandled exception. What I want to do is
basically catch this exception and then display a readable error message
explaining that it has to be run locally.
I've tried the following code at the very start of my Main() function:
[STAThread]
static void Main(string[] pasArgs)
{
try {
if
(System.Security.SecurityManager.ResolvePolicy(typeof(frmMain).Assembly.Evid
ence).IsUnrestricted() == false) {
MessageBox.Show("Must run locally!");
return;
}
} catch (System.Security.SecurityException e) {
MessageBox.Show(e.ToString());
return;
}
But I still get the exception and neither of my messageboxes show. Any ideas
how to catch this exception?
- Matt
Fernando Vicaria [MSFT] - 23 Jun 2004 23:23 GMT
Hi Matt,
You would need to demand for an identity permission here, either Zone or
Url. But this on its own is easy to fake so you should think of additional
security checks such as strong name or/and the use of an intermediate caller
assembly which will have your security checks built-in (and properly
obfuscated if necessary).
Have a look at UrlIdentityPermission and ZoneIdentityPermission.
Thanks,
Fernando
> Hello all,
>
[quoted text clipped - 37 lines]
>
> - Matt