Encontrei uma resposta deste site . Em suma, eu deveria ter executado cmd.exe como administrador.
Meu diretório pessoal é c: \ Users \ phi como um usuário phi e criei um diretório em c: \ Users \ abc. Eu preciso link simbólico de c: \ Users \ phi \ hello para c: \ Users \ abc \ hello.
Eu corro o seguinte comando
mklink c:\Users\abc\hello c:\Users\phi\hello
Mas recebo o erro Acesso negado . Phi do usuário é Administrador, então não tenho problemas para gravar arquivos em c: \ Users \ abc.
Por que isso? Como mklink?
Encontrei uma resposta deste site . Em suma, eu deveria ter executado cmd.exe como administrador.
Observe que o mesmo erro será apresentado quando você tentar criar junções em unidades mapeadas . Eu estava puxando o meu cabelo para fora até que me deparei com os exemplos nesta página no MSDN Hard Links e junções .
Resposta curta: você só pode usar o mklink em volumes locais.
Pontos importantes:
/D
precisa ser usada se o link for para o diretório. Uso:
mklink /D c:\users\me\new_link\ c:\users\me\original_folder\
No Windows 7 (e posterior), você precisa de um privilégio de segurança especial para criar links e junções. Como administrador, você pode conceder essa permissão aos usuários que usam secpol.msc
para definir Local Policies\User Rights Assignment\Create symbolic links
.
Se o usuário estiver logado no momento, será necessário fazer logoff e logon para poder criar links.
Observe que a cautela desses links pode expor as deficiências de segurança em alguns aplicativos - não pesquisei quais poderiam ser esses pontos fracos.
Se você usa Linux com frequência, lembre-se de que os parâmetros são trocados no Windows.
Se você usar a ordem errada, você receberá um "Acesso negado" também. Porque você está tentando criar um link simbólico onde o original já existe.
Windows: mklink /D link original
Linux: ln -s original link
Eu estava recebendo isso porque acidentalmente executei mklink /D
em um arquivo. O link não estava aparecendo no explorador, mas sim no Windows Explorer. Usando o Prompt de Comando Excluí o link do diretório inválido original e recriou-o sem a opção /D
.
A propósito, eu estava recebendo o erro "Acesso negado", embora eu estivesse executando o cmd.exe como administrador.
Além de executar mklink
como Administrador, você também deve certificar-se de ter permissões suficientes para a pasta de destino à qual está vinculando.
Se você executar:
mklink /j C:\path_to_link C:\destination
deve funcionar. No meu caso, o powershell e o cmd produziram a mesma saída. Para o powershell, você só precisa iniciar o comando com
cmd /c mklink...
Isso pode soar estranho, mas verifique se o arquivo ou a pasta ainda não existe e que você está tentando criar. Às vezes é fácil ignorar no prompt do cmd.
Para diretórios você precisa fazer:
mklink /D c:\Users\abc\hello c:\Users\phi\hello