Autor Beitrag
Macoy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Di 04.04.06 20:01 
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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416


Delphi32 (D2005 PE); Chrome/C# (VS2003 E/A, VS2005)
BeitragVerfasst: Di 04.04.06 23:50 
Sagt eigentlich schon der StackTrace ;)
ausblenden 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.