Perché non riesco a modificare un file "Programmi" su Windows 7?


25

Ho problemi a modificare questo file su Windows 7:

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

Se lo modifico in Cygwin (vi) o TextPad, quei due programmi vedono le modifiche, quindi viene scritto su disco da qualche parte . Ma se "digito" il file in una shell cmd DOS, sembra che il file non sia stato affatto modificato.

Una cosa che ho notato è che nella shell cmd, il proprietario è Administrators, ma nella shell bash di Cygwin, il proprietario è 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

Come può essere? È come se ci fossero due file diversi con lo stesso nome nella stessa directory.


stai ricevendo qualche messaggio di errore?
ChrisF,

Potrebbe essere una sorta di reindirizzamento delle cartelle WoW64 (poiché Cygwin è a 32 bit)?
Andrew Lambert,

Risposte:


35

A causa delle funzionalità di sicurezza introdotte con Windows Vista ( UAC ), qualsiasi programma non amministratore che tenta di scrivere in posizioni protette come "Programmi" verrà intercettato e reindirizzato a una posizione alternativa "user friendly".

Il programma che ha creato il file sarà in grado di vedere il file, ma la maggior parte degli altri programmi no.

Gli stati di Wikipedia (e ho evidenziato la sezione pertinente):

Le applicazioni scritte con il presupposto che l'utente eseguirà i privilegi di amministratore hanno riscontrato problemi nelle versioni precedenti di Windows quando eseguito da account utente limitati, spesso perché hanno tentato di scrivere su directory di sistema o di sistema (come Programmi) o chiavi di registro (in particolare HKLM). Controllo account utente tenta di alleggerirlo utilizzando la virtualizzazione di file e registro, che reindirizza le scritture (e le successive letture) in una posizione per utente all'interno del profilo dell'utente . Ad esempio, se un'applicazione tenta di scrivere in "C: \ programmi \ nome app \ settings.ini" e l'utente non dispone delle autorizzazioni per scrivere in quella directory, la scrittura verrà reindirizzata a "C: \ Users \ nome utente \ AppData \ Local \ VirtualStore \ Programmi \ nome app \ settings.ini ".

Quindi in teoria il tuo file modificato viene effettivamente scrittoC:\Users\YourUserName\AppData\Local\VirtualStore\Program Files (x86)\CMake 2.8.7\share\cmake-2.8\Modules

L'unico modo per aggirare questa limitazione è disabilitare completamente UAC , che non è raccomandato per motivi di sicurezza.

La soluzione migliore è che dovrebbe effettivamente avere cmake nel tuo percorso e utilizzare una posizione non protetta come da qualche parte all'interno del tuo profilo utente.


Grazie. Molto confuso. Ma come farebbe a fare (o no) cmake nel mio percorso? Il problema è che sto provando a eseguire il debug di questo file cmake, poiché non funziona correttamente.
Dan

Mi dispiace, stavo assumendo che stavi eseguendo cmake contro il file. Per utilizzare qualunque sia il file, dovrai scriverlo altrove, quindi dovresti essere in grado di utilizzare Explorer per copiare il file, dovresti ricevere un prompt UAC che ti chiede di assicurarti che questo sia ciò che vuoi fare e dopo il tuo file dovrebbe essere sovrascritto. La cosa principale è che puoi usare solo programmi compatibili con UAC (come Explorer) per copiare / scrivere file in quei percorsi.
Mokubai

La disabilitazione di UAC non è l' unica soluzione . Hai solo bisogno di dare al file / directory che sta causando problemi Modifyautorizzazioni al Usersgruppo di utenti andando nella scheda di sicurezza del file / cartella.
Scott Chamberlain,

LOL questo comportamento è bizzarro! Spiega molte delle stranezze che ho avuto. Grazie.
Jez,

13

La cartella Programmi è protetta dai diritti di amministratore. In Windows XP e precedenti, la maggior parte delle persone correva sempre come amministratore. Molti programmi presumevano che fosse così e facevano tutto il loro lavoro nella cartella Programmi.

Quando è stato rilasciato Windows Vista, hanno interrotto questa pratica, costringendo le applicazioni a utilizzare invece:

C: \ Users \% username% \ AppData

Questo ha rotto molte vecchie applicazioni. Per consentire alle applicazioni meno recenti di continuare a utilizzare solo le cartelle dell'amministratore, Windows ha creato un archivio virtuale in cui conservare i file modificati. Dai un'occhiata a:

C: \ Users \% username% \ AppData \ Local \ VirtualStore

Troverai i tuoi file lì. Puoi anche utilizzare Explorer aprendo la cartella e premendo il pulsante File di compatibilità nella parte superiore della finestra.


Grazie. Questa (e la risposta accettata) ha risolto un problema molto misterioso che stavo avendo. Ha perfettamente senso ora che è spiegato. La tua risposta è breve e direttamente al punto. +1 Grazie!
ridgerunner

0

Ho avuto un problema simile, poco dopo essermi trasferito su Windows 7 (da XP) stavo cercando di decomprimere un file all'interno C:\Program Filese continuava a darmi un errore di accesso negato.

Dopo aver lottato molto, ho scoperto che dovevo prendere la proprietà dell'intera cartella prima di poter modificare le autorizzazioni per consentire al gruppo di amministratori Full Access - che, a mio avviso, dovrebbe avere giustamente.

Per diventare proprietario di una cartella: fai clic con il pulsante destro del mouse sulla cartella e vai a Properties, quindi fai clic sulla Securityscheda, quindi fai clic su Advanced, quindi sulla Ownerscheda e fai clic Edit. Seleziona "Sostituisci proprietario su subcontenitori e oggetti", quindi seleziona il nuovo proprietario (ad es. Il gruppo "Amministratori"), quindi pronuncia OK.


Uff, non devi assumerne la proprietà. Dai al Usersgruppo le autorizzazioni di modifica. Tuttavia, non si dovrebbe avere pieno accesso ai file di programma. L'impostazione predefinita di tutti gli amministratori è una cattiva scelta di progettazione e hanno tentato di risolverlo in Vista.
Scott Chamberlain,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.