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.
- O compartilhamento é mapeado para uma unidade de rede: por exemplo
g:
->\\server\share
- 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\share
e 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
No Editor do Registro, localize e clique na seguinte subchave do registro:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
No painel direito, clique com o botão direito em Novo e clique em Valor DWORD (32 bits).
- Nomeie a nova entrada de registro como
EnableLinkedConnections
.- Clique duas vezes na
EnableLinkedConnections
entrada do registro.- Na caixa de diálogo Editar valor DWORD, digite 1 no campo Dados do valor e clique em OK.
- 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. EnableLinkedConnections
nã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.exe
e 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:yes
parece 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.