Autor |
Beitrag |
maxx
      
Beiträge: 70
|
Verfasst: Sa 20.02.10 21:01
hello,
habe in meinem Buch ein Beispiel, das so ähnlich ausschaut wie das hier:
Datei Program.cs:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using System.Security.Permissions; [assembly: FileIOPermissionAttribute(SecurityAction.RequestMinimum, Write = @"C:\xxx.txt")] namespace perm { static class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } |
Die Datei xxx.txt habe ich (unter meinem XP-Rechner) schreibgeschützt und versteckt. Eigentlich hätte ich erwartet, dass ich dann dieses C#Programm nicht mehr starten kann. Es geht aber. Mache ich hier was falsch? Oder liegt das am XP? Moderiert von Christian S.: Topic aus C# - Die Sprache verschoben am Sa 20.02.2010 um 20:05
|
|
maxx 
      
Beiträge: 70
|
Verfasst: Sa 20.02.10 21:35
Könnt das mal bitte irgendwer bei sich testen? Würde mich interessieren, ob das nur bei mir ist. Und bitte das Betriebssystem dazuschreiben 
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Sa 20.02.10 21:43
Hallo!
Die Doku schreibt folgendes:
msdn.microsoft.com/e...bute%28VS.71%29.aspx hat folgendes geschrieben: | Files and directories are specified using absolute paths. When accessing files, a security check is performed when the file is created or opened. The security check is not done again unless the file is closed and reopened. Checking permissions when the file is first accessed minimizes the impact of the security check on application performance because opening a file happens only once, while reading and writing can happen multiple times. |
Die Rechte werden also beim ersten Zugriff geprüft und nicht schon beim Start der Anwendung.
Grüße
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
maxx 
      
Beiträge: 70
|
Verfasst: Sa 20.02.10 21:52
Ich glaube, das passt mit dem überein, was in meinem Buch steht:
Zitat: | Aufgrund dieses Attributs löst die Runtime vor dem Ausführen eine Ausnahme aus, falls das angegebene Privileg nicht vorliegt. |
Aber bei mir prüft er anscheinend nicht. Denn wenn er prüfen würde, würde er erkennen, dass die Datei C:\xxx.txt schreibgeschützt ist. Dann dürfte er das C#Programm nicht starten.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Sa 20.02.10 21:56
Wo greifst Du denn auf die Datei zu? Ich sehe das zumindest nicht 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
maxx 
      
Beiträge: 70
|
Verfasst: Sa 20.02.10 22:02
Auf die Datei C:\xxx.txt greife ich überhaupt nicht zu. Das will ich auch gar nicht (bei meinem einfachen Testbeispiel). Ich will nur kontrollieren, ob ich auf diese Datei C:\xxx.txt Schreibrechte habe. Und wenn nicht, soll mein C#Programm nicht starten.
EDIT: Oh. Jetzt glaube ich zu wissen, was du hiermit gemeint hast:
Zitat: | Die Rechte werden also beim ersten Zugriff geprüft und nicht schon beim Start der Anwendung. |
Ich formuliere deinen Satz mal etwas um:
Die Rechte auf die Datei C:\xxx.txt werden also beim ersten Zugriff (auf die Datei C:\xxx.txt) geprüft und nicht schon beim Start der C#Anwendung.
Richtig?
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Sa 20.02.10 22:06
So verstehe ich zumindest die Doku. 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
maxx 
      
Beiträge: 70
|
Verfasst: Sa 20.02.10 22:08
Dann steht in meinem Buch ein Blödsinn?
Nochmals das Zitat:
Zitat: | Aufgrund dieses Attributs löst die Runtime vor dem Ausführen eine Ausnahme aus, falls das angegebene Privileg nicht vorliegt. |
Mit "dieses Attributs" ist sicher das hier gemeint:
[assembly: FileIOPermissionAttribute(SecurityAction.RequestMinimum, Write = @"C:\xxx.txt")]
Mit "vor dem Ausführen" bin ich eigentlich davon ausgegangen, dass damit das Ausführen des C#Programms gemeint war.
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Sa 20.02.10 22:22
OT: Das ist doch ein allgemeines .NET-Buch, oder? Dann verstehe ich nicht, warum dort CAS überhaupt behandelt wird, wenn der Durchschnittsentwickler doch quasi nie damit in Berührung kommt. Dürfte die wohl unpopulärste .NET-API überhaupt sein  .
Wenn du nur Zugriffsrechte überprüfen willst, öffne die Datei und fange die entsprechende Exception ab - einfacher geht's nimmer  .
_________________ >λ=
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Sa 20.02.10 22:28
Hm. Ich habe da gerade mal bei mir rumgetestet und bin mir jetzt nicht mehr wirklich sicher, wann dieses Attribut was bewirken soll. Ich bin da also besser erstmal still und warte, ob hier jemand ist, der's wirklich weiß
Auf jeden Fall gehört das Attribut in die Datei "AssemblyInfo.cs" im Properties-Ordner Deines Projektes und nicht in die Datei mit der Main-Methode.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
maxx 
      
Beiträge: 70
|
Verfasst: So 21.02.10 10:32
Ändert sich nichts, wenn ich das Attribut in AssemblyInfo.cs gebe. Mein C#Programm wird immer noch gestartet.
Wäre toll, wenn das mal irgendwer bei sich ausprobieren könnte. Vielleicht geht es ja nur bei Win-XP nicht. Ab Vista hat sich einiges geändert. Vielleicht funktioniert es ab Vista.
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mo 22.02.10 21:50
Noch einmal: CAS ist hier sicherlich das falsche Werkzeug. Dir geht es doch um die Berechtigungen im Dateisystem, aber ob eine Datei schreibgeschützt ist, interessiert FileIOPermissionAttribute überhaupt nicht. CAS ist eine reine .NET-Sache und normale Desktop-Anwendungen besitzen standardmäßig sowieso Full Trust.
Um aber deine Frage zu beantworten: Ja, in deinem Buch steht ziemlich sicher Blödsinn  .
Zitat: | When accessing files, a security check is performed when the file is created or opened. |
Christian S. hat folgendes geschrieben : | Auf jeden Fall gehört das Attribut in die Datei "AssemblyInfo.cs" im Properties-Ordner Deines Projektes und nicht in die Datei mit der Main-Methode. |
Ist lediglich eine Konvention von VS, Assembly-Attribute dürfen, glaube ich, überall auf Namespace-Level zwischen using und Typen/NS deklariert werden  .
_________________ >λ=
|
|