Laden...

Fehlende Zugriffsrechte beim Erstellen, Schreiben, Lesen von Dateien auf Windows 7

Erstellt von Ayke vor 14 Jahren Letzter Beitrag vor 8 Jahren 8.627 Views
Ayke Themenstarter:in
643 Beiträge seit 2006
vor 14 Jahren
Fehlende Zugriffsrechte beim Erstellen, Schreiben, Lesen von Dateien auf Windows 7

Hi,

ich habe bei mir Window 7 installiert. Nun habe ich einige Probleme mit den Rechten beim erstellen, schreiben und lesen. Ich bekomme eine Meldung das ich nicht genug Rechte habe (UnauthorizedAccessException). Wenn ich meine Anwenung aber mit "Rechte Maustatse | Als Administrator ausführen" starte, funktioniert es einwandfrei. Da mein Benutzeraccount Administrator Rechte hat, erwarte ich das dies nicht nötig ist.

Ich habe nun eine möglichkeit gesucht, um während der Laufzeit die nötigen Rechte zu vergeben.

        public static bool SetPermissions(string dir) 
        {
            try
            {
                DirectoryInfo info = new DirectoryInfo(Path.GetDirectoryName(dir));
                DirectorySecurity ds = info.GetAccessControl();

                ds.AddAccessRule(new FileSystemAccessRule(Environment.MachineName + "\\" + Environment.UserName,
                    FileSystemRights.FullControl,
                    InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit,
                    PropagationFlags.None,
                    AccessControlType.Allow));

                info.SetAccessControl(ds);
                return true;
            }

            catch { return false; }
        }

Leider auch ohne erfolg...
Ich bekomme nur wieder eine Meldung, das ich nicht genug Rechte habe.
In Visual Studio gestartet funktioniert alles. Das merkwürdige ist das die
erstellte Datei im Explorer nicht sichtbar ist. Sie wird auch nicht gefunden, wenn ich den Pfad zur Datei direkt im Explorer eintrage.

Hat jemand von euch paar Tipps zu diesen Problem auf Windows 7 oder auch Vista ?

Gelöschter Account
vor 14 Jahren

Da mein Benutzeraccount Administrator Rechte hat, erwarte ich das dies nicht nötig ist.

nein dein acc hat keine adminrechte.

In Visual Studio gestartet funktioniert alles.

weil dort im debugmode adminrechte herrschen müssen.

Das merkwürdige ist das die
erstellte Datei im Explorer nicht sichtbar ist. Sie wird auch nicht gefunden, wenn ich den Pfad zur Datei direkt im Explorer eintrage.

es gibt ein recht "nur schauen aber nciht öffnen"

wenn du den pfad+datei im explorer einträgst, dann versucht er sie gleich zu öffnen aber offensichtlich hast du dafür kein recht.

all diese probleme tauchen bei win7 nur dann auf, wenn du in die falschen verzeichnisse versuchst zu schreiben oder zu lesen..... also wo genau versuchst du die datei zu erstellen/öffnen.. ?

Ayke Themenstarter:in
643 Beiträge seit 2006
vor 14 Jahren

Ich kenne mich mit Windows 7 oder auch Vista noch nicht so gut aus, da ich vor kurzen erst umgestiegen bin. Mir gefällt dieses ganze Benutzer und Rechte- System nicht.

es gibt ein recht "nur schauen aber nicht öffnen"

wenn du den pfad+datei im explorer einträgst, dann versucht er sie gleich zu öffnen aber offensichtlich hast du dafür kein recht.

Sah alle anderen Dateien bis auf die eine. Problem tritt aus unempfindlichen gründen nicht mehr auf.

nein dein acc hat keine adminrechte.

Laut Windows 7 habe ich Admin- Rechte. Und ich sehe bis jetzt auch keine Einschränkungen, bis auf die Probleme ich mit meiner oder auch andere Anwendungen haben.

also wo genau versuchst du die datei zu erstellen/öffnen.. ?

Es ist das System verzeichnis. Führe ich jede Anwendung als Benutzer aus bis ich auf "Als Administrator ausführen" einstelle ?

2.223 Beiträge seit 2005
vor 14 Jahren

Hallo Ayke,

das ist ein Sicherheitfeature von Vista und Windows 7,
du kannst das ganze aber wie folgt umgehen.
Du fügst zu deinem Projekt eine Manifestdatei hinzu.

die Manifest Datei änderst du dann so ab, das diese Datei so aussieht

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC Manifest Options
            If you want to change the Windows User Account Control level replace the 
            requestedExecutionLevel node with one of the following.

        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

            If you want to utilize File and Registry Virtualization for backward 
            compatibility then delete the requestedExecutionLevel node.
        -->
    <!--DIESE STELLE IST WICHTIG-->
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

Diese änderung bewirkt, dass Du beim Starten deiner Anwendung eine Info bekommst hallo das Programm läuft mit Admin Rechten.

Herzliche Grüße
Lars

X
1.177 Beiträge seit 2006
vor 14 Jahren

huhu,

Ich kenne mich mit Windows 7 oder auch Vista noch nicht so gut aus, da ich vor kurzen erst umgestiegen bin. Mir gefällt dieses ganze Benutzer und Rechte- System nicht.

Tja, als ehemaliger Admin muss ich Dich Entwickler jetzt schelten! Es gib/gab immer Probleme mit Programmen, nur weil sich die Entwickler nicht an Vorgaben halten. (z.B. schreiben ins Windows-Verzeichnis) Dann muss der arme Admin einem User auf einem Rechner Admin-Rechte geben? das kann es in einer Firma nicht sein.

Der Unterschied von NT/2000/XP -> Vista/Win7 ist einfach, dass auch ein lokaler Administrator erstmal immer als normaler Benutzer arbeitet. Nur auf Anforderung (siehe Post von Lars Schmitt) werden einem Programm wirkliche Administrator-Rechte gegeben.

Also: Nur wenn es wirklich notwendig ist und es definitiv keine andere Möglichkeit gibt, Programme so schreiben, dass sie Adminrechte benötigen. Alles andere ist schlechter Stil.

😃

Xynratron

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

1.361 Beiträge seit 2007
vor 14 Jahren

Hi Aykes,
(ich kann Xynratron nur zustimmen - und zwar 100%ig)

Führe ich jede Anwendung als Benutzer aus bis ich auf "Als Administrator ausführen" einstelle?

Kurz und knapp: ja!
(Außer man hat das deaktiviert. Oder die Anwendung beinhält implizit die Aufforderung der Elevation - wie von Lars beschrieben - und ist zusätzlich noch von MS zertifiziert, dann gibs Admin-Rechte gratis)

Mir gefällt dieses ganze Benutzer und Rechte- System nicht.

Dieses Rechte-System gibts seit Windows NT und ist richtig gut! Das Hauptproblem ist, dass die meisten Heimandwender immer als Administrator unterwegs sind und sich viele viele Entwickler nicht an Konventionen halten.
Das macht aber das ganze System unsicher hoch 10 und führt jedes Sicherheitskonzept ad absurdum.

Mit Windows Vista/7 hat MS erstmals eine gewisse Benutzerbeschränkung standardmäßig eingebaut. -> Ein erster Schritt zur Besserung!

Und bezüglich:

Es ist das System verzeichnis.

Was suchst du da? Wenn dein Tool kein System-Tool wird, dann hast du da reichlich wenig verloren. Gerade, weil früher alles und jeder im System herumgewerkelt hat (und es dank Adminrechte durfte) wurde das System instabiler und instabiler. Programme ließen sich nicht ordentlich deinstallieren, gewisse Programme funzen nebeneinander nicht, und und und...

beste Grüße
zommi

Ayke Themenstarter:in
643 Beiträge seit 2006
vor 14 Jahren

@Lars Schmitt
Danke für deinen Tipp. Das ist was ich gesucht habe.

@Xynratron, zommi
Vorteile hat das ganze bestimmt. Es ist auch nur in seltenen Fällen nötig, in Verzeichnise wie System32 zu schreiben. Trozdem möchte ich meine möglichkeiten kennen, falls ich Sie mal brauche. Nach einwenig
Eingewöhnungszeit wird mir Windows 7 bestimmt auch gefallen.

174 Beiträge seit 2009
vor 8 Jahren

Hallo,

um diesen Thread noch einmal aufzugreifen...

Wenn ich, wie von Lars angeregt, eine Manifest-Datei entsprechend eingebunden und angepasst habe, wird beim Kompilieren trotzdem im Ausgabeverzeichnis eine Manifest-Datei generiert.

Aber lt. Projekteigenschaften soll sie doch eingebunden werden ???

Muß ich diese Manifest-Datei jetzt mit zum Kunden ausliefern, oder nicht ???
(das wäre ja fatal, da der Kunde sie dann ja ändern könnte ...)

MfG Christian

16.827 Beiträge seit 2008
vor 8 Jahren

Sicher, dass Du in den Projekteinstellung dann auf Dein eigenes Manifest verwiesen hast?
Denn wenn nicht erzeugt VS automatisch eine Standard-Manifest-Datei.

174 Beiträge seit 2009
vor 8 Jahren

Hallo Abt,

leider funktioniert die E-Mail-Benachrichtigung nicht 🤔, sonst hätte ich eher geantwortet...

Definitiv verweise ich auf das Manifest - siehe Anhang...

Im Ausgabeverzeichnis erscheint dann nach dem Kompilieren eine <Progname>.vshost.manifest mit genau den Einstellungen, wie ich sie in der app.manifest vorgenommen habe ...

Btw. warum kann man nur eine Datei anhängen ???

MfG Christian

F
10.010 Beiträge seit 2004
vor 8 Jahren

Wozu meinst du das überhaupt zu brauchen, denn in 99% der Fälle liegt das Problem eher daran das du ( wie Ayke auch ) einfach im falschen Verzeichnis schreiben willst.

174 Beiträge seit 2009
vor 8 Jahren

Ich will (muß) beim Start des Programms überprüfen, ob dieses Programm schon mal auf diesem Rechner ausgeführt wurde...

Wenn nein, erstelle ich einen Schlüssel unter HKLM; wenn ja und noch nicht lizensiert, dann setzte ich einen Zähler hoch...

War bis jetzt kein Problem, da alle Kunden bisher mit Admin-Rechten einverstanden waren, nur jetzt habe ich einen, der das eben nicht will 🙁

Ich sehe gerade, das ich im falschen Thread gelandet bin ( X( ) - Asche auf mein Haupt ...

Das passiert, wenn man zu viele Tasks offen hat ...

Aber trotzdem bleibt die Frage nach dem warum .

@ für die Admin´s - warum erhalte ich keine E-Mail-Benachrichtigung mehr ???

MfG Christian

16.827 Beiträge seit 2008
vor 8 Jahren

@ für die Admin´s - warum erhalte ich keine E-Mail-Benachrichtigung mehr ???

Du hast jetzt Glück, dass ich Deine Frage gelesen hab. Ansonsten hättest Du Dich wohl gewundert, dass Dir darauf niemand antwortet.
Administrative Fragen mitten im Thread zu stellen ist relativ sinn frei - und gehört hier auch nicht hin.
Besser wäre Kontakt zum Team

Wir kennen das Problem und arbeiten bereits dran.

174 Beiträge seit 2009
vor 8 Jahren

ich gelobe Besserung 😉

F
10.010 Beiträge seit 2004
vor 8 Jahren

Ich will (muß) beim Start des Programms überprüfen, ob dieses Programm schon mal auf diesem Rechner ausgeführt wurde...

Wenn nein, erstelle ich einen Schlüssel unter HKLM; wenn ja und noch nicht lizensiert, dann setzte ich einen Zähler hoch...

Bei den meisten Firmen würdest du mit deiner Herangehensweise gleich abgewiesen.
Wegen so etwas die Software zwangsweise im Adminmodus zu starten ist die falsche Herangehensweise.
Der Installer der für deine SW benutzt wird, kann den HKLM Key erstellen, denn ein Installer läuft i.a. als Admin.
Und alles danach kann man auch ohne Adminberechtigungen hinbekommen.

174 Beiträge seit 2009
vor 8 Jahren

Mit dieser Herangehensweise habe ich doch nichts gewonnen ...

Ok, mit dem Installer könnte ich die Schlüssel anlegen, aber wenn ich den Counter hochsetzen will,
muß ich ja wieder schreibend zugreifen.

Würde ich das mit dem Counter außerhalb der Registry machen, dann könnte man ja wieder relativ leicht manipulieren.

Bei abschließenden der Lizensierung könnte man ja bewusst "als Admin" starten, um die Werte zu setzen, aber das Setzen des Counters muß unbemerkt passieren.

MfG Christian

16.827 Beiträge seit 2008
vor 8 Jahren

Wenn eine Anwendung für sowas Adminrechte braucht, dann stimmt etwas nicht.
Software Lizenzierung und Lizenzmechanismen ist ne Wissenschaft für sich.

Was Du aber machst wird, wie FZelle schon sagte und auch Gott sei dank so ist, in den meisten Firmen absolut 0 toleriert.

Würde ich das mit dem Counter außerhalb der Registry machen, dann könnte man ja wieder relativ leicht manipulieren.

Die Registry kann genauso manipuliert werden wie jeder andere Ort des Rechners.
Die Registry ist nur komplizierter zu lesen, weil es die meisten nicht tagtäglich kennen.

F
10.010 Beiträge seit 2004
vor 8 Jahren

aber das Setzen des Counters muß unbemerkt passieren.

Wenn jemand eine Lizenzierung umgehen will wird immer zuerst Procmon angeschmissen,
und der zeigt dir das gleich an.

Egal was du meinst machen zu müssen, die Registry ist der falsche Ort für laufdaten.

174 Beiträge seit 2009
vor 8 Jahren

Ok, ich sehe schon ein, das ich mein "altes" Konzept überdenken muss ...

Irgendwelche konstruktiven Vorschläge (Ideen), was den versteckten Counter betrifft ???

MfG Christian

16.827 Beiträge seit 2008
vor 8 Jahren

Bist ja nicht der erste mit der Anforderung.
Lass Dich doch einfach inspirieren.. Google-Suche nach c# trial version application