Laden...

Security Exception beim Aufruf von unmanaged code

Erstellt von michaelgeis vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.301 Views
M
michaelgeis Themenstarter:in
2 Beiträge seit 2005
vor 18 Jahren
Security Exception beim Aufruf von unmanaged code

Ich muss eine Funktion aus einer C Bibliothek von meinem C#.NET code aufrufen.
Wenn ich mein Programm ausfuehre, bekomme ich eine SecurityException geworfen, obgleich ich
eine security permission zum ausfuehren von unmanaged code beantragt habe.
Ich habe den Code schon von einem Administrator account laufen lassen, was an der Fehlermeldung auch nichts geaendert hat (es scheint also nicht an meinen Rechten als regulaerer user zu liegen).
Ausserdem laeuft der Code problemlos, wenn ich die try-catch sequenz eliminere. Das assert der SecurityPermission scheint also keine Probleme gemacht zu haben.

HIer ist der relevante Code mit der Fehlermeldung:


//importiere die Funktion energy_of_struct aus der RNA.dll  
[SuppressUnmanagedCodeSecurityAttribute()][DllImport ("RNA.dll", CharSet=CharSet.Auto, CallingConvention=CallingConvention.Cdecl)]
private static extern float energy_of_struct (char[] sequence, char[] structure);

//calculate the free energy of the particle's current node.
   public bool Evaluate(){
    	System.Console.WriteLine("Evaluate: Trying to obatin Security Permission");
	//convert the contacts Hashtable into a bracketed string, that can be read by the vienna RNA package.
        String contacts_vienna=Pso.Util.ContactsToBracketExpression(contacts,bases.Count);
        SecurityPermission perm=new SecurityPermission(SecurityPermissionFlag.UnmanagedCode);
        perm.Assert();
        System.Console.WriteLine("Evaluate: Have asserted Security Permission");
      
       
	try{
	fitness=energy_of_struct(bases.ToString().ToCharArray(),contacts_vienna.ToCharArray());
	}
	catch(System.DllNotFoundException e){
		System.Console.WriteLine("Could not load dll");
		System.Console.WriteLine(e.ToString());
	}
	catch(System.Security.SecurityException e){
		System.Console.WriteLine("Security Exception:");
		System.Console.WriteLine(e.ToString());
	}
		return true;
}

Fehlermeldung:

Unbehandelte Ausnahme: System.Security.SecurityException: System.Security.Permis  

sions.SecurityPermission
at Pso.Conformation.Evaluate()
at Swarm.Evaluate() in \ws1\geis\Profile\Eigene Dateien\SharpDevelop Project
s\pso\pso_particle.cs:line 180
at Swarm.DeployParticles() in \ws1\geis\Profile\Eigene Dateien\SharpDevelop
Projects\pso\pso_particle.cs:line 119
at Swarm.Main(String[] args) in \ws1\geis\Profile\Eigene Dateien\SharpDevelo
p Projects\pso\pso_particle.cs:line 210

Status der fehlgeschlagenen Berechtigung:

<IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Ve
rsion=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Flags="UnmanagedCode"/>

Ich habe erst aufgrund dieses Problems begonnen, mich in den System.Security namespace einzulesen und kenne mich demgemaess mit der Vielzahl an permissions noch nicht aus. Fuer Fingerzeige, was denn das Problem beim obigen Code sein koennte, (bzw. was ein geeigneter Suchtbegriff fuer MSDN sein koennte), waere ich sehr dankbar.

Michael

4.221 Beiträge seit 2005
vor 18 Jahren

Was passiert wenn Du das SuppressUnmanagedCodeSecurityAttribute auch auf dem Evaluate drauf machst ?

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

M
michaelgeis Themenstarter:in
2 Beiträge seit 2005
vor 18 Jahren

Danke fuer den Vorschlag.
Ich hatte ein laengeres rencontre mit unserem sysadmin, der meinen Assemblies jetzt mehr Rechte zugeteilt hat. Das funktioniert zwar noch nicht ganz, hat aber gelegentlich zeitweise diese Exception beseitigt. Es muss also an den Systemeinstelluingen gelgen haben.
Ich schau auch mal, ob es was bringt, das suppress-Kommando zweimal zu geben.

Vielen Dank,
Michael