Macoy - Di 04.04.06 20:01
Titel: LAN und DotNet Anwendungen
Hallo,
Ich habe hier zwei rechner, einer Win2k, einer WinXP und ich entwickle gerade ein Programm, das nix mit Netzwerk zu tun hat.
Folgende Situation: Das Programm wurde von Rechner 1 kompiliert und liegt auf einem freigegebenen Verzeichniss. Nun möchte ich die erzeugte EXE von Rechner 2 starten. Dazu gehe ich in das freigegebene Verzeichniss und clicke doppelt auf das Anwendungicon.
Und plötzlich:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| Unhandled Exception: System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed. at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) at System.Security.CodeAccessPermission.Demand() at System.IO.Directory.GetLogicalDrives() at System.IO.DriveInfo.GetDrives() at SRec.GUI.DirectoryTree..ctor() // <---- hier beginnt mein Programm at SRec.GUI.MainForm.InitializeComponent() at SRec.GUI.MainForm..ctor() at SRec.MainClass.Main(String[] args) |
Zunächst riesen Schreck, da ich dachte, ich hab irgendwas falsch gemacht , so das das Programm nicht auf anderen Rechnern läuft. Aber dann, als ich die EXE vom Netzlaufwerk auf ein lokales Laufwerk kopierte, lief alles wie gewohnt.
Betrifft zwar nun nich mein Programm - lokal läuft es ja wie es soll - , aber ich wüsste trotzdem gern, woran o.a. Fehlermeldung herrührt.
Robert_G - Di 04.04.06 23:50
Sagt eigentlich schon der StackTrace ;)
Quelltext
1: 2: 3: 4:
| at System.Security.CodeAccessPermission.Demand() at System.IO.Directory.GetLogicalDrives() at System.IO.DriveInfo.GetDrives() at SRec.GUI.DirectoryTree..ctor() |
Dein DirectoryTree führte DriveInfo.GetDrives aus, welches Directory.GetLogicalDrives() ausführt, was wiederum Berechtigungen braucht, die eine Assembly außerhalb deines Rechners standardmäßig nicht hat.
Du hast jetzt x Möglichkeiten, der Assembly Rechte zu vergeben...
- Du signierst die Assembly und erlaubst allen Kompilaten mit dem Publickey Zugriff auf dein File system
- Du erlaubst allen Assemblies in dem Ordner Zugriff auf dein Filesystem
- Du suchst im MSDN nach ".Net CAS" und schust dir die tausend anderen Wege an, die ich hier nicht alle Aufzählen will
Die besagten Einstellungen kannst du unter "Start\Control panelßAdmin Tools\.Net X.X Config\Security policies" einstellen.