Sicherheitsfehler bei Zugriff in Registry

Hallo,

mir stellt sich z.Z. folgendes Problem:
Eine Anwendung versucht einen Reg-Schluessel auszulesen, und den Wert als Parameter fuer einen Anwendungsstart herzunehmen.
Die Zielumgebung: WinXP Intranet, Framework 2.0
Entwicklungsungebung: VB .Net (2010)
Auf meiner Enticklermaschine funktioniert sie problemlos.

Der Fehler tritt auf, wenn die Anwendung in einem Intranet von einem Netzlauferk gestartet wird, sowohl auf einer XP-Workstation, als auch in einer Citrix-Session unter Win-Server 2000.
Es gibt nur ein Szenario in der die Anwendung funktioniert, und zwar wenn der SysAdmin die Anwendung direkt von seinem Desktop startet. Selbst als Admin kann man die Anwendung nicht vom lokalen C: Laufwerk ausfuehren, und auch nicht von einem Netzlaufwerk.
Welche Sicherheitseinstellungen verhindern die Ausfuehrung?

Ein relativ einfache .Net Anwendung liefert diese Fehlermeldung:

************** Exception Text **************

System.Security.SecurityException: Request for the permission of type ‚System.Security.Permissions.RegistryPermission, 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 Microsoft.Win32.RegistryKey.CheckSubKeyReadPermission(String subkeyName)

Demand
The type of the first permission that failed was:
System.Security.Permissions.RegistryPermission
The Zone of the assembly that failed was:
Intranet

Any Help Welcome

Peter

Hallo!
Da spuckt Dir die CAS (Code Access Security) in die Suppe. .NET Code darf in Abhängigkeit davon, von wo er ausgeführt wird, nämlich u.U. nicht alles, was nativer, nicht verwalteter Code darf.
Es gibt ein Kommandozeilentool caspol.exe im jeweiligen .NET Verzeichnis, mit dem Du festlegen kannst, dass bspw. Code aus dem Intranet zur Gruppe FullTrust gehört und damit die gleichen Rechte bekommt wie Code, der vom lokalen Rechner ausgeführt wird.

Gruß,
Martin

Hallo,

tja, das klingt wohl eher unschoen. Aber es muss eine andere Loesung geben, denn es kann doch wohl nicht sein, das man das Tool caspot auf jedem Rechner anwenden muss, der das Programm starten soll. I.m.F. wuerde das c. 35 Rechner betreffen, und auserdem laesst mich in diesem Intranet niemand mit der noetigen Berechtigungsebene an eine Maschine um solche Einstellungen vorzunehmen. Es muss doch eine Loesung geben die sich auf eine gesamte Domain im Intranet auswirkt.
btw.: die Anwendung laesst sich ja auch nicht von einem lokalen Laufwerk einer Workstation starten. Nur wenn ein Admin die exe. auf seinen Desktop kopiert, funktioniert es.

Dann muss ich wohl noch etwas weiter nach einer Loesung suchen, oder die Anwendung in VC 6.0 neu bauen.

Tschau
Peter

Hallo!

Du kannst die nötigen CAS Policies ja auch per AD in der Domäne verteilen.
Oder Du baust es in eine Installationsroutine ein.

Hier ist noch ein Link zu einem ähnlichen Thema:
http://www.mycsharp.de/wbb2/thread.php?postid=266635

Die ganze Anwendung mit unmanaged code neu zu erstellen, weil Du Dich mit den Sicherheitsmechanismen von .NET nicht anfreunden kannst, halte ich für etwas übertrieben, aber es ist ja Deine Zeit… :smile:

Gruß,
Martin

Hallo,

besten Dank fuer die Info.
Das Problem ist weniger, das ich mich nicht mit den Sicherheitsmechanismen von .Net vertraut machen will, sondern das ich keine Zeit und Laune habe, 120 Telefongespraeche zu fuehren, 20 Antragsformulare auszufuellen, 15 Genehmigungen einzuholen und 3 Monate warten will, bis die Anwendung ueber Active Directory verteilt werden darf. Das Zielsystem ist dahingehend etwas sehr restiktiv ausgelegt und die Admins notrisch ueberlastet.

Tschau
Peter