Problema estranho de “cópia de sombra”, em que dois editores exibem diferentes conteúdos

2

Eu tenho algum código que está lendo um arquivo de configuração, mas quando eu abro o arquivo no TextPad, vejo valores diferentes do que o meu aplicativo. Eu verifiquei com o Bloco de Notas. Notepad concorda com o meu pedido, TextPad mostra outra coisa.

Isso está no Vista x64 Business.

Alguma ideia do que poderia estar causando isso? Eu olhei nos detalhes de Context Menu->Properties->Previous Versions , mas diz "Não há versões anteriores disponíveis".

Fui perguntado por um exemplo, aqui estão as etapas para replicar (não consigo fazer isso de forma confiável):

  1. Aplicativo .NET instalado em arquivos de programas.
  2. Esse aplicativo lê o arquivo de configuração, mas está caindo.
  3. Eu edito manualmente esse arquivo de configuração no Textpad.
  4. A alteração não entra em vigor.
  5. Eu abro o arquivo de configuração no Bloco de Notas e vejo algo diferente.
  6. Tente fazer a alteração no bloco de notas e salvar e receba esta mensagem de erro:

Notepad

Cannot create the C:\Program Files (x86)\Daniel Schaffer\WorkingOn for FogBugz\FogBugz > WorkingOn.exe.config file.

Make sure that the path and file name are correct.

Eu não posso colocar o conteúdo aqui como XML e está sendo codificado pelo Superuser.com, mas aqui está um link para um screencast: link .

    
por Neil Barnwell 25.09.2009 / 13:18

2 respostas

6

Você provavelmente está correndo para uma parte dos recursos do UAC do Vista chamado Loja Virtual . Aqui está um trecho do artigo:

When an application writes to a system location only writeable by administrators, Windows then writes all subsequent file operations to a user-specific path under the Virtual Store directory, which is located at %LOCALAPPDATA%\VirtualStore. Later, when the application reads back this file, the computer will provide the one in the Virtual Store. Because the Windows security infrastructure processes the virtualization without the application’s assistance, the application believes it was able to successfully read and write directly to Program Files. The transparency of file virtualization enables applications to perceive that they are writing and reading from the protected resource, when in fact they are accessing the virtualized version.

Sua inscrição está sendo executada em um contexto não elevado (não administrativo). Portanto, quando ele tenta abrir o arquivo na pasta Arquivos de Programas, essa solicitação é redirecionada para o local do Armazenamento Virtual de suas contas de usuário de forma transparente. Sua cópia do TextPad é provavelmente executada em um contexto elevado e, por isso, está vendo o arquivo que está na pasta real Arquivos de Programas.

Se este é o seu código que você pode alterar a funcionalidade e deseja que os usuários possam usá-lo sem ser executado como administrador, você deve alterar o local de armazenamento dos arquivos de configuração em algum lugar da pasta ApplicationData do usuário. pertence. Escrever configurações em um arquivo de configuração armazenado na pasta de instalação do aplicativo é altamente desencorajado nos dias de hoje. Se você realmente tem configurações que devem ser aplicadas a todos os usuários da máquina, você deve gravá-las na pasta All Users Application Data. E mesmo assim, você ainda terá que executar o aplicativo em um contexto Elevado por padrão, a menos que você conceda explicitamente ao grupo de usuários acesso de gravação à sua pasta.

Apenas mantenha este mantra na sua cabeça enquanto você escreve software para o Vista e além. "Os usuários só podem escrever no perfil ... Os usuários só podem escrever no perfil"

    
por 09.11.2009 / 17:33
0

O motivo pelo qual o Notepad não pode criar o arquivo é que outro processo está bloqueando-o. Como o conteúdo do arquivo muda, meu palpite é que o aplicativo está escrevendo o arquivo enquanto você o examina.

    
por 25.09.2009 / 14:16