Por que não consigo editar um arquivo “Program Files” no Windows 7?

23

Estou com problemas para editar este arquivo no Windows 7:

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

Se eu editá-lo no Cygwin (vi) ou no TextPad, esses dois programas vêem as mudanças, então ele está sendo gravado no disco em algum lugar . Mas se eu "digitar" o arquivo em um shell cmd do DOS, parece que o arquivo não foi alterado.

Uma coisa que notei é que no shell cmd, o proprietário é Administradores, mas no shell bash do Cygwin, o proprietário é 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

Como isso pode ser? É como se houvesse dois arquivos diferentes com o mesmo nome no mesmo diretório.

    
por Dan 30.01.2012 / 22:29

3 respostas

33

Devido a recursos de segurança introduzidos no Windows Vista ( UAC ), qualquer programa não-administrador que tente gravar em locais protegidos tais como "Arquivos de Programas" receberão suas gravações capturadas e redirecionadas para um local alternativo "amigável".

O programa que fez o arquivo poderá ver o arquivo, mas a maioria dos outros programas não.

Estados da Wikipédia (e eu destaquei a seção relevante):

Applications written with the assumption that the user will be running with administrator privileges experienced problems in earlier versions of Windows when run from limited user accounts, often because they attempted to write to machine-wide or system directories (such as Program Files) or registry keys (notably HKLM). UAC attempts to alleviate this using File and Registry Virtualization, which redirects writes (and subsequent reads) to a per-user location within the user’s profile. For example, if an application attempts to write to “C:\program files\appname\settings.ini” and the user doesn’t have permissions to write to that directory, the write will get redirected to “C:\Users\username\AppData\Local\VirtualStore\Program Files\appname\settings.ini”.

Então teoricamente seu arquivo alterado está sendo gravado em C:\Users\YourUserName\AppData\Local\VirtualStore\Program Files (x86)\CMake 2.8.7\share\cmake-2.8\Modules

A única maneira de contornar essa restrição é completamente desabilitar o UAC , o que não é recomendado por motivos de segurança.

A melhor solução é que você deve ter o cmake em seu caminho e estar usando um local não protegido, como em algum lugar dentro do seu perfil de usuário.

    
por 30.01.2012 / 22:59
11

A pasta Arquivos de programas é protegida por direitos de administrador. No Windows XP e versões anteriores, a maioria das pessoas trabalhava como Administrador o tempo todo. Muitos programas assumiram que este era o caso e fizeram todo o seu trabalho na pasta Arquivos de Programas.

Quando o Windows Vista foi lançado, eles interromperam essa prática, forçando os aplicativos a usar:

C:\Users\%Username%\AppData

Isso quebrou muitos aplicativos antigos. Para permitir que o aplicativo antigo continue usando pastas somente do administrador, o Windows criou uma loja virtual para manter os arquivos alterados. Dê uma olhada em:

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

Você encontrará seus arquivos lá. Você também pode usar o Explorer abrindo a pasta e pressionando o botão Arquivos de compatibilidade na parte superior da janela.

    
por 30.01.2012 / 23:01
0

Eu tive um problema semelhante, logo após me mudar para o Windows 7 (do XP) eu estava tentando descompactar um arquivo dentro de C:\Program Files e ele continuava me dando um erro de acesso negado.

Depois de muito wrestling, descobri que precisava assumir a propriedade da pasta inteira antes de poder alterar as permissões para permitir ao grupo de administradores acesso total - que, na minha opinião, deveria ter sido feito corretamente.

Para se tornar proprietário de uma pasta: clique com o botão direito do mouse na pasta e vá para Properties , clique na guia Security , clique em Advanced , depois na guia Owner e clique em% código%. Marque "Substituir proprietário em sub-recipientes e objetos" e selecione o novo proprietário (por exemplo, o grupo "Administradores") e, em seguida, diga Edit .

    
por 07.02.2013 / 03:00