Em um dia normal de trabalho, uma aplicação estava se conectando a um banco de dados quando eu a executava e a outro banco de dados quando outro usuário executava o programa. O banco correto estava em um arquivo, localizado no mesmo diretório do executável. O que estava acontecendo? O Capiroto tomou conta da aplicação?
Não… era só o Windows sendo Windows. Monitorando o ambiente, descobri que o arquivo de configuração que estava sendo carregado não estava no caminho onde estava a aplicação, mas em outro diretório, estava no VirtualStore.
Imagine que a aplicação está instalada no diretório C:\Program Files (x86)\RaccoonNinja e esta aplicação precisa escrever no arquivo settings.config.
Por razões de segurança, o Windows não permite que qualquer um escreva nas subpastas do c:\Program Files (x86)\ e quando uma aplicação tenta fazer isso, ele redireciona a ação para um diretório VirtualStore, que funciona como uma espécie de Sandbox.
Foi isso que aconteceu com a aplicação que estava executando. Quando o outro usuário executou o programa, o arquivo de configuração estava apontando para o banco A e quando eu tentei, o arquivo estava apontando para o banco B. O outro usuário abria o arquivo de configuração e notava que a aplicação deveria conectar ao banco B mas, para ele, estava sempre indo para o banco A.
Neste caso específico, o diretório do tipo VirtualStore estava localizado na pasta C:\Users\username\AppData\Local\VirtualStore\Program Files (x86)\RaccoonNinja
Como evitar que estes diretórios sejam criados? Simples, você tem duas opções:
- Executar a aplicação como Administrador
- Instalar a aplicação em um diretório que todos tenham acesso;
Versão tl;dr: Estes diretórios são criados quando o usuário que está rodando a aplicação não tem permissão para escrever na pasta onde está o software. Eles ficam em um subdiretório C:\Users\username\AppData\Local\VirtualStore\.
Para evitar que eles sejam criados, deve-se executar a aplicação como Administrador ou move-la para uma pasta pública.
Latest posts by Breno RdV (see all)
- O que é Metaclass e como ela funciona. (#python #dev #metaclass) - janeiro 11, 2023
- Entenda a mágica dos Generators. (#python, #dev, #generator, #iterator) - dezembro 28, 2022
- Ordenando um DataFrame por múltiplas colunas. (#python #pandas #jupyter #dev #data) - agosto 3, 2022