O que acontece quando executo um programa como administrador?

O que acontece quando executo um programa como administrador?

Estou tentando executar um exe Win7 que está em um compartilhamento de rede (um servidor Linux CIFS). O compartilhamento foi criado por alguém que não é administrador (consulteProblema do Windows 7 para acessar pasta compartilhada). Posso ler, editar e gravar arquivos na pasta que contém o exe. Posso ler (ou seja, copiar) o exe.

Mas quando tentocorrero exe, clicando duas vezes e OK na caixa de diálogo do UAC ou clicando com o botão direito em "Executar como administrador", recebo:

Windows cannot access the specified device, path, or file. You may not have the appropriate permissions to access the item.

Devo copiar o exe para o disco local antes de executá-lo?

Segui a receita no (resposta ainda não aceita para)Como posso executar um EXE a partir de um compartilhamento de rede?, mas isso parece conceder apenas permissões de leitura, não permissões de exe.

(Distantemente relacionado:Não é possível executar .exe da unidade de rede.)

Responder1

Este é um comportamento esperado (embora incomum).

Quando você executa um programa a partir de um compartilhamento de rede, isso pode ser feito de várias maneiras.

  1. O compartilhamento é mapeado para uma unidade de rede: por exemplo g:->\\server\share
  2. O compartilhamento é acessado diretamente pelo compartilhamento:\\server\share

O primeiro já pode causar problema ao executar um programa como Administrador e explicarei isso a seguir.

O que acontece quando executo um programa como administrador?

Ao executar um programa como administrador, um novo ambiente é criado e o perfil do Administrador é carregado. Embora use os direitos do seu usuário, obviamente possui direitos adicionais para o usuário administrador. Como consequência, nenhum mapeamento para uma unidade de rede é criado e, portanto, seu usuário Administrador não possui nenhum mapeamento de rede adicional presente em seu perfil, portanto, g: não existe.

É até possível que, se as configurações de segurança do compartilhamento forem muito rígidas, o usuário administrador também não tenha permissão.

Como solucionar e superar o problema?

Obviamente você pode simplesmente copiar o arquivo localmente e executá-lo, mas vamos supor que você não queira fazer isso.

Você pode iniciar um prompt de comando como administrador primeiro. A partir daí digite o seguinte comando:

net use g: \\server\share

Substitua a unidade e compartilhe para que correspondam ao compartilhamento existente.

Enquanto esta janela do prompt de comando estiver aberta, você poderá executar seu executável como administrador e ele funcionará com certeza.

Se o seu usuário não tiver direitos para o \\server\share, net use falhará com um erro informando exatamente isso, para que você saiba onde está o problema.

Se os direitos forem bons, você pode alternativamente acessar o executável acessando \\server\sharee executando o executável como administrador. Isso elimina a necessidade de ter um compartilhamento de rede primeiro em um ambiente diferente.

Responder2

Você deve definir o valor EnableLinkedConnections como 1 conforme descrito neste artigo da base de conhecimento:

As unidades mapeadas não estão disponíveis em um prompt elevado quando o UAC está configurado para "Solicitar credenciais" no Windows
https://support.microsoft.com/en-us/kb/3035277

  1. No Editor do Registro, localize e clique na seguinte subchave do registro:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

  2. No painel direito, clique com o botão direito em Novo e clique em Valor DWORD (32 bits).

  3. Nomeie a nova entrada de registro como EnableLinkedConnections.
  4. Clique duas vezes na EnableLinkedConnectionsentrada do registro.
  5. Na caixa de diálogo Editar valor DWORD, digite 1 no campo Dados do valor e clique em OK.
  6. Saia do Editor do Registro e reinicie o computador.

Responder3

Alguns instaladores precisam ser acessíveis por NT AUTHORITY\SYSTEM, mas as unidades de rede são específicas do usuário. EnableLinkedConnectionsnão vai ajudar neste caso.

Exclua sua unidade de rede existente e mapeie-a novamente no nível do sistema. Para fazer isso, crie uma tarefa agendada com ação: net.exee argumentos: use z: \\host\share\(forneça a senha, se necessário) e altere a conta para executar esta tarefa para NT AUTHORITY\SYSTEM. /PERSISTENT:yesparece não funcionar, então você precisará programá-lo para ser executado na inicialização

Depois de executá-lo, todo o sistema verá a unidade de rede. No Windows Explorer, ele será exibido como desconectado, mas funcionará mesmo assim.

informação relacionada