The only change I had to make to get your simple sample code to work was change
PythonInstance to derive from MarshalByRefObject. I wonder if
typeof(Program).Assembly.Location could end up pointing to a location which is
not fully trusted (e.g. a network share?) It seems highly unlikely but it's
the only explanation I can come up with (.NET determines what level of trust to
grant assemblies based upon what zone the code came from - where the zone is
the same zones that IE uses).
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Reflection;
using IronPython.Hosting;
using IronPython.Runtime;
using IronPython.Runtime.Operations;
using IronPython.Modules;
namespace ConsoleApplication1
{
[Serializable]
public class PythonInstance : MarshalByRefObject
{
// IronPython Modules
private static PythonEngine _python;
public PythonInstance()
{
// Create Python Engine
EngineOptions options = new EngineOptions();
options.ExceptionDetail = true;
options.ClrDebuggingEnabled = true;
PythonInstance._python = new PythonEngine(options);
}
public void AddPythonPath(string path)
{
PythonInstance._python.AddToPath(path);
}
}
class Program
{
static void Main(string[] args)
{
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationName = Assembly.GetEntryAssembly().FullName;
setup.ApplicationBase =
Path.GetDirectoryName(typeof(Program).Assembly.Location);
AppDomain domain = AppDomain.CreateDomain("PythonDomain", null,
setup);
// Create Test Engine in remote domain
object obj = domain.CreateInstanceAndUnwrap("ConsoleApplication1",
"ConsoleApplication1.PythonInstance");
PythonInstance python = obj as PythonInstance;
python.AddPythonPath(@"C:\temp");
}
}
}
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of [EMAIL PROTECTED]
Sent: Wednesday, May 23, 2007 9:22 AM
To: [email protected]
Subject: Re: [IronPython] PythonEngine in separate AppDomain?
Hi Dino,
I get this error with or without the permission code. Here is the problem I am
trying to solve...
We have a test tool that allows the load/reload of Python test scripts. It is
implemented in CPython. We manipulate the sys.modules dictionary to "clean" out
any modules the test module loaded. This "cleaning" allows the developers to
quickly run/edit/reload/run the test scripts. We are porting this application
to IronPython by hosting the PythonEngine in a C# application. The new tool
allows the user to load .NET assemblies as well as the classic python modules.
The ability to reload is handy. Since it is possible to unload AppDomains for
the assembly based tests, I was thinking that just putting the PythonEngine in
a separate AppDomain I could handle the unload the same way. This is when I
started running into permission issues.
I wanted to avoid the "cleaning" of the sys.modules dictionary because it has
proved error-prone in the CPython implementation. I may have to start going
down this path.
Thanks for your feedback.
Mike
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Dino Viehland
Sent: Tuesday, May 22, 2007 1:54 PM
To: Discussion of IronPython
Subject: Re: [IronPython] PythonEngine in separate AppDomain?
Are you getting this even if you don't do anything w/ permissions?
You're going to have a tough time running IronPython in partial trust before
.NET 2.0 SP1 or Orcas. In SP1 of the CLR (which is the CLR included w/ Orcas
and I believe will ship stand-alone as its own SP at some point) various
portions of Reflection.Emit have had the appropriate security hardening to
ensure they work properly in partial trust. Unfortunately both of those are
still beta code :(.
Thanks in advance...
Mike
_______________________________________________
users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com