Warum kann ich unter Windows 7 keine „Programmdateien“ bearbeiten?

25

Ich habe Probleme beim Bearbeiten dieser Datei unter Windows 7:

C:\Program Files (x86)\CMake 2.8.7\share\cmake-2.8\Modules\FindJNI.cmake

Wenn ich es in Cygwin (vi) oder TextPad bearbeite, sehen diese beiden Programme die Änderungen, sodass es irgendwo auf die Festplatte geschrieben wird . Aber wenn ich die Datei in eine DOS-Cmd-Shell "eingebe", sieht es so aus, als ob die Datei überhaupt nicht geändert wurde.

Eine Sache, die mir aufgefallen ist, ist, dass in der Cmd-Shell der Besitzer Administratoren ist, in der Bash-Shell von Cygwin jedoch Dan:

C:\Program Files (x86)\CMake 2.8.7\share\cmake-2.8\Modules>dir /Q FindJ*
 Volume in drive C is Windows7_OS
 Volume Serial Number is 92CA-8707

 Directory of C:\Program Files (x86)\CMake 2.8.7\share\cmake-2.8\Modules

12/30/2011  09:45 AM             1,480 BUILTIN\Administrators FindJasper.cmake
12/30/2011  09:45 AM             7,951 BUILTIN\Administrators FindJava.cmake
12/30/2011  09:45 AM            10,632 BUILTIN\Administrators FindJNI.cmake
12/30/2011  09:45 AM             1,669 BUILTIN\Administrators FindJPEG.cmake
               4 File(s)         21,732 bytes
               0 Dir(s)  132,524,654,592 bytes free


Dan@home /c/Program Files (x86)/CMake 2.8.7/share/cmake-2.8/Modules
$ ls -al FindJ*
-rwx------+ 1 Dan            None 10636 Jan 30 13:57 FindJNI.cmake
-rwx------+ 1 Administrators None  1669 Dec 30 09:45 FindJPEG.cmake
-rwx------+ 1 Administrators None  1480 Dec 30 09:45 FindJasper.cmake
-rwx------+ 1 Administrators None  7951 Dec 30 09:45 FindJava.cmake

Wie kann das sein? Es ist, als gäbe es zwei verschiedene Dateien mit demselben Namen im selben Verzeichnis.

Dan
quelle
Erhalten Sie Fehlermeldungen?
ChrisF
Könnte es eine Art von WoW64-Ordnerumleitung sein (da Cygwin 32-Bit ist)?
Andrew Lambert

Antworten:

35

Aufgrund der mit Windows Vista ( UAC ) eingeführten Sicherheitsfunktionen werden alle Programme, die keine Administratoren sind und versuchen, an geschützte Speicherorte wie "Programme" zu schreiben, abgefangen und an einen anderen "benutzerfreundlichen" Speicherort umgeleitet.

Das Programm, das die Datei erstellt hat, kann die Datei sehen, die meisten anderen Programme jedoch nicht.

Wikipedia gibt an (und ich habe den relevanten Abschnitt hervorgehoben):

Bei Anwendungen, die mit der Annahme geschrieben wurden, dass der Benutzer mit Administratorrechten ausgeführt wird, traten in früheren Windows-Versionen Probleme auf, wenn sie mit eingeschränkten Benutzerkonten ausgeführt wurden, häufig weil versucht wurde, in maschinenweite Verzeichnisse oder Systemverzeichnisse (z. B. Programme) oder Registrierungsschlüssel zu schreiben (insbesondere HKLM). Die Benutzerkontensteuerung versucht, dies mithilfe der Datei- und Registrierungsvirtualisierung zu mildern , bei der Schreibvorgänge (und nachfolgende Lesevorgänge) an einen benutzerspezifischen Speicherort im Benutzerprofil umgeleitet werden . Wenn eine Anwendung beispielsweise versucht, in "C: \ Programme \ Anwendungsname \ Einstellungen.ini" zu schreiben, und der Benutzer keine Berechtigungen zum Schreiben in dieses Verzeichnis hat, wird der Schreibvorgang an "C: \ Benutzer \ Benutzername" umgeleitet \ AppData \ Local \ VirtualStore \ Programme \ Anwendungsname \ settings.ini ”.

Theoretisch wird also in Ihre geänderte Datei geschriebenC:\Users\YourUserName\AppData\Local\VirtualStore\Program Files (x86)\CMake 2.8.7\share\cmake-2.8\Modules

Die einzige Möglichkeit, diese Einschränkung zu umgehen , besteht darin, die Benutzerkontensteuerung vollständig zu deaktivieren. Dies wird aus Sicherheitsgründen nicht empfohlen.

Die beste Lösung ist, dass sich cmake tatsächlich in Ihrem Pfad befindet und einen nicht geschützten Speicherort verwendet, z. B. irgendwo in Ihrem Benutzerprofil.

Mokubai
quelle
Vielen Dank. Sehr verwirrend. Wie würde es einen Unterschied machen, wenn ich mich auf meinem Weg befinde (oder nicht)? Das Problem ist, dass ich versuche, diese cmake-Datei zu debuggen, da sie nicht richtig funktioniert.
Dan
Entschuldigung, ich habe angenommen, Sie haben cmake für die Datei ausgeführt. Um zu verwenden, was auch immer die Datei ist, müssen Sie sie an einer anderen Stelle schreiben. Dann sollten Sie in der Lage sein, die Datei mit dem Explorer zu kopieren. Sie sollten eine UAC-Eingabeaufforderung erhalten, die Sie auffordert, sicherzustellen, dass dies das ist, was Sie tun möchten, und danach Ihre Datei sollte überschrieben werden. Die Hauptsache ist, dass Sie nur UAC-fähige Programme (wie Explorer) zum Kopieren / Schreiben von Dateien an diesen Orten verwenden können.
Mokubai
Das Deaktivieren der Benutzerkontensteuerung ist nicht die einzige Möglichkeit, dies zu umgehen . Sie müssen Modifyder UsersBenutzergruppe nur die Datei / das Verzeichnis zuweisen, die / das Probleme verursacht, indem Sie zur Registerkarte Sicherheit der Datei / des Ordners wechseln.
Scott Chamberlain
LOL dieses Verhalten ist bizarr! Das erklärt viel von der Verrücktheit, die ich hatte. Vielen Dank.
Jez
13

Der Ordner "Programme" ist durch Administratorrechte geschützt. In Windows XP und früheren Versionen wurden die meisten Benutzer die ganze Zeit als Administrator ausgeführt. Viele Programme gingen davon aus, dass dies der Fall ist, und erledigten ihre gesamte Arbeit im Ordner "Programme".

Als Windows Vista veröffentlicht wurde, beendeten sie diese Praxis und zwangen die Anwendungen, stattdessen Folgendes zu verwenden:

C: \ Benutzer \% Benutzername% \ AppData

Dies hat viele ältere Anwendungen zerstört. Damit ältere Anwendungen weiterhin nur Administratorordner verwenden können, hat Windows einen virtuellen Speicher erstellt, in dem geänderte Dateien gespeichert werden.

C: \ Benutzer \% Benutzername% \ AppData \ Local \ VirtualStore

Dort finden Sie Ihre Dateien. Sie können den Explorer auch verwenden, indem Sie den Ordner öffnen und oben im Fenster auf die Schaltfläche Kompatibilitätsdateien klicken .

Hand-E-Food
quelle
Vielen Dank. Dies (und die akzeptierte Antwort) löste ein sehr mysteriöses Problem, das ich hatte. Ergibt jetzt, da es erklärt wird, vollkommen Sinn. Ihre Antwort ist kurz und direkt auf den Punkt. +1 Danke!
Ridgerunner
0

Ich hatte ein ähnliches Problem, kurz nachdem ich auf Windows 7 (von XP) umgestiegen war, versuchte ich, eine Datei darin zu entpacken, C:\Program Filesund es gab mir immer wieder den Fehler Zugriff verweigert.

Nach langem Ringen stellte ich fest, dass ich den Besitz des gesamten Ordners übernehmen musste, bevor ich die Berechtigungen ändern konnte, um der Administratorgruppe Vollzugriff zu gewähren - was meiner Meinung nach zu Recht der Fall sein sollte.

Um den Besitz eines Ordners zu übernehmen: Klicken Sie mit der rechten Maustaste auf den Ordner und gehen Sie zu Properties, klicken Sie dann auf die SecurityRegisterkarte, klicken Sie dann auf Advanced, dann auf die OwnerRegisterkarte und klicken Sie dann auf Edit. Aktivieren Sie "Eigentümer in Subcontainern und Objekten ersetzen", wählen Sie den neuen Eigentümer aus (z. B. die Gruppe "Administratoren") und sagen Sie dann OK.

Sam P
quelle
Ugh, du musst nicht die Verantwortung übernehmen. Geben Sie der UsersGruppe einfach Änderungsberechtigungen. Sie sollten jedoch keinen vollständigen Zugriff auf Programmdateien erhalten. Die Standardeinstellung für alle Administratoren war eine schlechte Wahl für das Design, und sie haben versucht, diese in Vista zu beheben.
Scott Chamberlain