Los que han estado desarrollando aplicaciones de escritorio con .NET, seguramente saben que el CLR es el encargado de lo que puede o no hacer una aplicación en función a los permisos que reciba.
Por si no saben todavía de la existencia de Zoner, ésta es una pequeña herramienta que permite probar si una determinada aplicación funciona o no en una zona determinada.
Este es el código de Zoner:
using System.Reflection;
using System.Security;
using System.Security.Policy;
class App
{
public static void Main(String[] args)
{
try
{
SecurityZone zone = SecurityZone.Internet;
String url = "http://www.IBuySpy.com";
String exe;
String[] newArgs = null;
for (Int32 index = 0; ; index++)
{
if (args[index][0] != '-' && args[index][0] != '/')
{
exe = args[index];
newArgs = new String[args.Length - (index + 1)];
Array.Copy(args, index + 1, newArgs, 0, newArgs.Length);
break;
}
String setting = args[index].Substring(3);
switch (args[index].ToUpper()[1])
{
case 'Z': // Set zone
zone = (SecurityZone) Enum.Parse(typeof(SecurityZone), setting, true);
break;
case 'U': // Set url
url = setting;
break;
default:
throw (new ApplicationException());
}
}
StartApp(exe, newArgs, zone, url);
}
catch (ArgumentException)
{
Usage();
}
catch (IndexOutOfRangeException)
{
Usage();
}
catch (ApplicationException) { Usage(); }
}
static void Usage()
{
Console.WriteLine(
"Usage: zoner /u:[url] /z:[zone] [Executable File]\n" +
"[url]\tUrl indicating the source of this .exe");
Console.WriteLine();
Console.Write("[zone]");
String[] zones = Enum.GetNames(typeof(SecurityZone));
foreach (String zone in zones)
{
Console.WriteLine("\t{0}", zone);
}
Console.WriteLine(
"\nDefault: zoner /u:http://www.IBuySpy.com /z:Internet");
}
static void StartApp(String exe,
String[] newArgs, SecurityZone zone, String url)
{
Evidence evidence = new Evidence();
evidence.AddHost(new Zone(zone));
evidence.AddHost(new Url(url));
AppDomain app = AppDomain.CreateDomain(exe, evidence);
app.ExecuteAssembly(exe, evidence, newArgs);
}
}
Lo que hace esta porción de código, es simplemente ejecutar en otro dominio la aplicación que se quiere probar, pero adjuntando información de la zona escogida.
Espero que esta pequeña utilidad les ayude a ahorrar un poco de tiempo :).