AppDomain StreamWriter Security Exception

07/08/2008 - 07:56 von Michael Burkhardt | Report spam
Hallo ich habe eine Frage bzgl. Sicherheit in AppDoamins. Ich erzeuge eine
AppDomain und lade eine Assambly MyAssambly.DLL. In dieser Assambly wird ein
Thread gestartet, der in eine Datei schreiben soll.

Code zum erzeugen der APP Domain:
...
AppDomainSetup setup;
string asmFilename = "MyAssabmly.dll";

if (!File.Exists(asmFilename))
{
MessageBox.Show("Assembly: '" +asmFilename+ "' existiert nicht!");
return;
}

setup = new AppDomainSetup();
setup.ShadowCopyFiles = "true";
domain = AppDomain.CreateDomain("NewAppDomain", new Evidence(), setup);

object obj = domain.CreateInstanceAndUnwrap("AppDomainLibrary",
"AppDomainLibrary.Class1");
MethodInfo mi = obj.GetType().GetMethod("Run");
mi.Invoke(obj, null);


Code der MyAssambly DLL:
...
public class Class1 : MarshalByRefObject
{
private static System.Threading.Thread m_pThreadMainMethod;


public void Run()
{
// Starten des Mainthreads
m_pThreadMainMethod = new System.Threading.Thread(Work.DoWork);
m_pThreadMainMethod.Start();
}
}

///
public class Work
{
public static void DoWork()
{
int nIndex = 0;
System.IO.StreamWriter stream;
stream = new StreamWriter("C:\\TEST1.TXT");
while (nIndex < 10)
{
stream.WriteLine("BlaBla");
System.Threading.Thread.Sleep(1000);
nIndex++;
}
stream.Close();
}
...
<<< stream = new StreamWriter("C:\\TEST1.TXT",); <- Hier bekomme ich ein
Security Exception!
Warum und was kann ich tun?

Danke im Voraus
Gruß Michael Burkhardt
 

Lesen sie die antworten

#1 Frank Dzaebel
07/08/2008 - 10:15 | Warnen spam
Hallo Michael,

[...] stream = new StreamWriter("C:\\TEST1.TXT");
[...]
Hier bekomme ich ein Security Exception!
Warum und was kann ich tun?



Nun, da wird intern auf jeden Fall:
FileIOPermissionAccess.Write
geprüft, was bei Dir fehlschlàgt.

Zwei Gründe.

1) Durch "new Evidence()" hast Du quasi eine
rechtelose leere Evidenz. Hier wohl besser:

domain = AppDomain.CreateDomain(
"NewAppDomain", AppDomain.
CurrentDomain.Evidence, setup);


2) Der Zugriff auf "C:\" ist z.B. als Nicht-Admin
unter Vista gesperrt. Wenn Du ein Verzeichnis
nimmst, wo Du Rechte hast, sollte es ok sein.
Im einfachsten Fall etwa:

stream = new StreamWriter("TEST1.TXT");

was das aktuelle Ausgabeverzeichnis nimmt.


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen