Por que não consigo editar um arquivo “Arquivos de Programas” no Windows 7?


25

Estou tendo 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 o editar no Cygwin (vi) ou no TextPad, esses dois programas verão as alterações e, portanto, serão gravados no disco em algum lugar . Mas se eu "digitar" o arquivo em um shell do cmd do DOS, parece que o arquivo não foi alterado.

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


Você está recebendo alguma mensagem de erro?
ChrisF

Poderia ser algum tipo de redirecionamento de pasta WoW64 (já que o Cygwin é de 32 bits)?
Andrew Lambert

Respostas:


35

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

O programa que criou o arquivo poderá vê-lo, mas a maioria dos outros programas não.

A Wikipedia afirma (e destaquei a seção relevante):

Os aplicativos gravados com a suposição de que o usuário estará executando com privilégios de administrador tiveram problemas nas versões anteriores do Windows, quando executados a partir de contas limitadas, geralmente porque tentaram gravar em diretórios de todo o computador ou do sistema (como Arquivos de Programas) ou chaves do Registro (notavelmente HKLM). O UAC tenta aliviar isso usando a virtualização de arquivos e registros, que redireciona gravações (e leituras subsequentes) para um local por usuário no perfil do usuário . Por exemplo, se um aplicativo tentar gravar em "C: \ arquivos de programas \ appname \ settings.ini" e o usuário não tiver permissões para gravar nesse diretório, a gravação será redirecionada para "C: \ Users \ nome de usuário \ AppData \ Local \ VirtualStore \ Arquivos de Programas \ appname \ settings.ini ”.

Então, em teoria, seu arquivo alterado está realmente sendo gravado emC:\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 é desabilitar completamente o UAC , o que não é recomendado por razões de segurança.

A melhor solução é que, na verdade, o cmake esteja no seu caminho e esteja usando um local não protegido, como em algum lugar dentro do seu perfil de usuário.


Obrigado. Muito confuso. Como ter cmake no meu caminho (ou não) faria alguma diferença? O problema é que estou tentando depurar esse arquivo cmake, pois ele não está funcionando corretamente.
Dan

Desculpe, eu estava assumindo que você estava executando o cmake no arquivo. Para usar o que quer que seja o arquivo, você deverá escrevê-lo em outro lugar, e poderá usar o Explorer para copiar o arquivo. Você receberá um prompt do UAC solicitando que você tenha certeza de que é isso que deseja fazer e depois disso. seu arquivo deve ser substituído. O principal é que você só pode usar programas com reconhecimento de UAC (como o Explorer) para copiar / gravar arquivos nesses locais.
Mokubai

Desabilitar o UAC não é o único problema . Você só precisa dar Modifypermissões ao arquivo / diretório que está causando problemas ao Usersgrupo de usuários, indo para a guia segurança do arquivo / pasta.
Scott Chamberlain

LOL esse comportamento é bizarro! Isso explica muito da estranheza que tive. Obrigado.
Jez

13

A pasta Arquivos de programa é protegida pelos direitos de administrador. No Windows XP e versões anteriores, a maioria das pessoas trabalhava como Administrador o tempo todo. Muitos programas supuseram que esse era o caso e fizeram todo o 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: \ Usuários \% Nome de Usuário% \ AppData

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

C: \ Usuários \% Nome de Usuário% \ 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.


Obrigado. Isso (e a resposta aceita) resolveu um problema muito misterioso que eu estava tendo. Faz todo o sentido agora que está explicado. Sua resposta é curta e direta ao ponto. +1 Obrigado!
Ridgerunner

0

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

Depois de muitas lutas, descobri que tinha de me apropriar de toda a pasta antes de poder alterar as permissões para permitir que o grupo de Administradores tivesse acesso total - o que, na minha opinião, deveria ter.

Para se apropriar de uma pasta: clique com o botão direito do mouse na pasta e vá para Properties, clique na Securityguia, clique na guia e, em Advancedseguida Owner, clique em Edit. Marque "Substituir proprietário nos sub-recipientes e objetos", selecione o novo proprietário (por exemplo, o grupo "Administradores") e diga OK.


Ugh, você não precisa se apropriar. Apenas dê ao Usersgrupo permissões de modificação. No entanto, você não deve ter acesso total aos arquivos de programa. O padrão de todos os administradores serem uma má opção de design e eles tentaram corrigi-lo no Vista.
Scott Chamberlain
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.