Um programa que funciona para um usuário e falha para outro, ou que só funciona quando aberto como administrador, quase sempre esbarra na conta que o executa. Cada conta tem permissões, configurações e pastas próprias, e o Windows ainda limita os poderes do administrador no uso comum.
Tipos de conta
Uma conta do Windows pode ter três origens:
- Conta local: existe só naquele computador, com o usuário e a senha guardados nele.
- Conta Microsoft: ligada a um endereço de e-mail cadastrado na Microsoft, que sincroniza configurações entre computadores.
- Conta de domínio: criada em um servidor de domínio da empresa e aceita em todos os computadores ligados a esse domínio.
Administradores e usuários padrão
As contas pertencem a grupos. O grupo Administradores pode instalar programas, alterar configurações do sistema e gravar em pastas protegidas. O grupo Usuários usa os programas e grava nas próprias pastas, sem alterar o sistema. O comando net localgroup Administradores lista as contas do grupo de administradores, e o comando whoami mostra a conta em uso.
O Windows tem também uma conta interna chamada Administrador, que vem desativada. A conta interna e uma conta do grupo Administradores são coisas diferentes, e a conta interna, quando ativada, roda sem as confirmações do UAC.
O UAC
O Controle de Conta de Usuário, o UAC, faz um administrador trabalhar com permissões de usuário comum até que uma ação exija mais. Quando um programa precisa de permissão de administrador, o Windows mostra a janela de confirmação, e só então o programa recebe a permissão completa. Um usuário padrão, nessa janela, precisa informar a senha de uma conta de administrador.
A opção Executar como administrador, no menu do botão direito, abre o programa com a permissão completa, e um prompt de comando aberto dessa forma mostra a palavra Administrador no título da janela. Um comando que exige essa permissão, executado em um prompt comum, falha com acesso negado, mesmo em uma conta do grupo Administradores.
O que é de cada conta
Cada conta tem um perfil próprio, em C:\Users, com as pastas, as configurações e uma parte do registro. Por isso, ficam separados por conta:
- as unidades de rede mapeadas;
- as impressoras de rede adicionadas pelo usuário;
- as configurações regionais, como o separador decimal;
- as variáveis de ambiente do usuário;
- os certificados instalados no repositório do usuário;
- as configurações gravadas pelos programas na pasta AppData.
Um programa que funciona com uma conta e falha com outra pode depender de um desses itens. Os programas que rodam como serviço do Windows usam outra conta, sem nenhum desses itens do usuário conectado.
Uma unidade mapeada no uso comum também não aparece para um programa aberto como administrador, porque o Windows trata a sessão comum e a sessão elevada separadamente. O caminho de rede completo, como \\servidor-loja\SISTEMA, funciona nas duas sessões.
No suporte
Diante de um programa que funciona para um usuário e falha para outro, convém comparar as duas contas: o grupo, as unidades mapeadas, as impressoras, as configurações regionais e as pastas do perfil. Abrir o programa como administrador só para ver se funciona serve de teste, mas não resolve a causa, e um programa que passa a depender disso fica com uma permissão maior que a necessária.
Para guardar
- Uma conta pode ser local, Microsoft ou de domínio.
- O grupo Administradores altera o sistema, e o grupo Usuários usa os programas.
- O UAC faz o administrador trabalhar como usuário comum até a confirmação.
- Unidades mapeadas, impressoras, configurações regionais e perfis são de cada conta.
Um comando para reiniciar um serviço falha com acesso negado, e a conta usada é do grupo Administradores. O que explica a falha?
O prompt foi aberto sem a elevação do UAC. Mesmo em uma conta de administrador, os programas rodam com permissão comum até a confirmação, e o prompt aberto com Executar como administrador resolve.
A unidade de rede do sistema aparece no Explorador de Arquivos, mas um programa aberto como administrador não encontra a mesma letra. Por quê?
Porque o Windows trata a sessão comum e a sessão elevada separadamente, e o mapeamento feito na sessão comum não aparece na elevada. O caminho de rede completo, como \\servidor-loja\SISTEMA, funciona nas duas sessões.