Hi Michael, that's actually exactly what I'm doing-- a FullTrust app dynamically creates an AppDomain in which I'm executing my examples below
> -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of Michael Foord > Sent: Tuesday, August 26, 2008 6:57 PM > To: Discussion of IronPython > Subject: Re: [IronPython] Loading DLL from pyc.py into ScriptEngine > > hellosticky wrote: > > Okay, I tried it but got a Security Exception in > System.Scripting.Com.ComMetaObject.IsComObject. The > permission requested was for UnmanagedCode. I'm running in > partial trust so obviously I can't be giving the code > UnmanagedCode privilege. Is there some flag I have to set > that says I'm in partial trust? > > > > Does any part of your application run in full trust? You can create a > runtime with a 'remote' engine inside an appdomain with > partial trust. > Not something I'm an expert on however... > > Michael > > > FirstPermissionThatFailed: > > {<IPermission > class="System.Security.Permissions.SecurityPermission, > mscorlib, Version=2.0.0.0, Culture=neutral, > PublicKeyToken=b77a5c561934e089" > > version="1" > > Flags="UnmanagedCode"/> > > } > > > > Server stack trace: > > at > System.Security.CodeAccessSecurityEngine.ThrowSecurityExceptio > n(Assembly asm, PermissionSet granted, PermissionSet refused, > RuntimeMethodHandle rmh, SecurityAction action, Object > demand, IPermission permThatFailed) > > at > System.Security.CodeAccessSecurityEngine.ThrowSecurityExceptio > n(Object assemblyOrString, PermissionSet granted, > PermissionSet refused, RuntimeMethodHandle rmh, > SecurityAction action, Object demand, IPermission permThatFailed) > > at > System.Security.CodeAccessSecurityEngine.CheckSetHelper(Permis > sionSet grants, PermissionSet refused, PermissionSet demands, > RuntimeMethodHandle rmh, Object assemblyOrString, > SecurityAction action, Boolean throwException) > > at > System.Security.CodeAccessSecurityEngine.CheckSetHelper(Compre > ssedStack cs, PermissionSet grants, PermissionSet refused, > PermissionSet demands, RuntimeMethodHandle rmh, Assembly asm, > SecurityAction action) > > at System.Scripting.Com.ComMetaObject.IsComObject(Object obj) > > at System.Scripting.Actions.MetaAction.Bind[T](Object[] args) > > at > System.Scripting.Actions.CallSite`1.CreateNewRule(Rule`1 > originalMonomorphicRule, Object[] args) > > at > System.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] args) > > at > System.Scripting.Actions.UpdateDelegates.Update6[T,T0,T1,T2,T3 > ,T4,T5,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2, T3 > arg3, T4 arg4, T5 arg5) > > at IronPython.Runtime.Importer.Import(CodeContext > context, String fullName, PythonTuple from, Int32 level) > > at > IronPython.Runtime.Operations.PythonOps.ImportTop(CodeContext > context, String fullName, Int32 level) > > at <module>$2##2(Closure , Scope , LanguageContext ) > > at > System.Scripting.ScriptCode.InvokeTarget(LambdaExpression > code, Scope scope) > > at > System.Scripting.Runtime.OptimizedScriptCode.InvokeTarget(Lamb > daExpression code, Scope scope) > > at System.Scripting.SourceUnit.Execute(Scope scope, > ErrorSink errorSink) > > at > Microsoft.Scripting.Hosting.ScriptSource.Execute(ScriptScope scope) > > at DlrHostedProvider.OnRender() > > > > Here is the code I used (approximately): > > > > StringBuilder sb = new StringBuilder(100); > > > > using (MemoryStream ms = new MemoryStream()) > > { > > using (StringWriter writer = new StringWriter(sb)) > > { > > Assembly assembly = Assembly.Load(AssemblyName); > > ScriptRuntime runtime = ScriptRuntime.Create(); > > runtime.LoadAssembly(assembly); > > runtime.IO.SetOutput(ms, writer); > > ScriptEngine engine = > runtime.GetEngine(GetEngineName()); > > ScriptScope scope = engine.CreateScope(); > > string code = string.Format(@"import clr > > clr.AddReference(""{0}"") > > import {1} > > ", > > AssemblyName, > > AssemblyType.Replace(".py", "") > > ); > > ScriptSource source = > engine.CreateScriptSourceFromString( > > code, > > SourceCodeKind.Statements > > ); > > source.Execute(scope); > > } > > } > > content = sb.ToString(); > > > > Thanks, > > > > > >> -----Original Message----- > >> From: hellosticky [mailto:[EMAIL PROTECTED] > >> Sent: Tuesday, August 26, 2008 6:46 PM > >> To: 'Srivatsn Narayanan'; 'Discussion of IronPython' > >> Subject: RE: [IronPython] Loading DLL from pyc.py into ScriptEngine > >> > >> Thanks, I will try that. Can you explain again how just doing > >> "import test" executes the test.py file that was compiled > >> into the DLL? It's not very logical.. > >> > >> Thanks, > >> > >> > >>> -----Original Message----- > >>> From: Srivatsn Narayanan [mailto:[EMAIL PROTECTED] > >>> Sent: Tuesday, August 26, 2008 6:34 PM > >>> To: Discussion of IronPython; [EMAIL PROTECTED] > >>> Subject: RE: [IronPython] Loading DLL from pyc.py into > ScriptEngine > >>> > >>> Also Assembly.Load is not sufficient to be able to import the > >>> compiled code. A clr.AddReference needs to be done which > >>> publishes the module. The easiest way to do that is include > >>> it in the string as Michael pointed out. > >>> > >>> ScriptSource source = > >>> engine.CreateScriptSourceFromString("import > >>> clr;clr.AddReference(\"test.dll\");import test", > >>> SourceCodeKind.Statements); > >>> > >>> You might need to add the current folder to the path as well > >>> before the clr.AddReference. > >>> > >>> -----Original Message----- > >>> From: [EMAIL PROTECTED] > >>> [mailto:[EMAIL PROTECTED] On Behalf Of > >>> > >> Michael Foord > >> > >>> Sent: Tuesday, August 26, 2008 3:12 PM > >>> To: [EMAIL PROTECTED]; Discussion of IronPython > >>> Subject: Re: [IronPython] Loading DLL from pyc.py into > ScriptEngine > >>> > >>> hellosticky wrote: > >>> > >>>> I also tried: > >>>> > >>>> Assembly assembly = Assembly.Load(AssemblyName); > >>>> ScriptRuntime runtime = ScriptRuntime.Create(); > >>>> runtime.LoadAssembly(assembly); > >>>> ScriptScope scope = runtime.ExecuteFile("test.py"); > >>>> object o = scope.Execute(null); > >>>> > >>>> But that threw a script not found exception saying it could > >>>> > >>> find the source file for test.py, so it would seem like this > >>> wants to recompile it > >>> > >>>> > >>>>> -----Original Message----- > >>>>> From: hellosticky [mailto:[EMAIL PROTECTED] > >>>>> Sent: Tuesday, August 26, 2008 5:52 PM > >>>>> To: IronPython > >>>>> Subject: Loading DLL from pyc.py into ScriptEngine > >>>>> > >>>>> Hi, > >>>>> > >>>>> I created an IronPython DLL with "ipy.exe pyc.py /out:test > >>>>> /target:dll test.py" which created test.dll. Now, from C#, > >>>>> I'd like to execute test.py from test.dll. I just opened up > >>>>> dlr-spec-hosting and there's a CreateScriptSourceFromStream, > >>>>> but I don't see that in 2.0 Beta 4 bits. Here is where I'm > >>>>> stuck. How do I get that assembly into the engine and then > >>>>> execute test.py? > >>>>> > >>> Well - the easiest way is to execute 'import test' after > >>> > >> having added > >> > >>> the assembly. This should execute the code in order to create > >>> a module. > >>> > >>> ScriptScope scope = engine.CreateScope(); > >>> ScriptSource source = > >>> engine.CreateScriptSourceFromString("import test", > >>> SourceCodeKind.Statements); > >>> engine.Execute(scope); > >>> > >>> There is an API for setting a stream as stdout on an engine - > >>> 'runtime.IO.SetOutput'. > >>> > >>> Michael > >>> > >>> > >>>>> Also, I'd like to get the output into a > >>>>> string (I guess I can just redirect Console.Out?) > >>>>> > >>>>> public string Execute(string assemblyName) > >>>>> { > >>>>> string content = null; > >>>>> > >>>>> Assembly assembly = Assembly.Load(assemblyName); > >>>>> ScriptRuntime runtime = ScriptRuntime.Create(); > >>>>> ObjectOperations operations = runtime.CreateOperations(); > >>>>> ScriptEngine engine = runtime.GetEngine("py"); > >>>>> // magic.. > >>>>> > >>>>> return content; > >>>>> } > >>>>> > >>>>> Thanks, > >>>>> > >>>>> > >>>> _______________________________________________ > >>>> Users mailing list > >>>> [email protected] > >>>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com > >>>> > >>>> > >>> -- > >>> http://www.ironpythoninaction.com/ > >>> http://www.voidspace.org.uk/ > >>> http://www.trypython.org/ > >>> http://www.ironpython.info/ > >>> http://www.theotherdelia.co.uk/ > >>> http://www.resolverhacks.net/ > >>> > >>> _______________________________________________ > >>> Users mailing list > >>> [email protected] > >>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com > >>> > >>> > >>> > > > > _______________________________________________ > > Users mailing list > > [email protected] > > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com > > > > > -- > http://www.ironpythoninaction.com/ > http://www.voidspace.org.uk/ > http://www.trypython.org/ > http://www.ironpython.info/ > http://www.theotherdelia.co.uk/ > http://www.resolverhacks.net/ > > _______________________________________________ > Users mailing list > [email protected] > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com > _______________________________________________ Users mailing list [email protected] http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
