Erro de acesso negado, quando eu mklink no Windows 7 [duplicado]

34

Esta pergunta já tem uma resposta aqui:

Meu diretório pessoal é c: \ Users \ phi como phi de usuário e eu criei um diretório em c: \ Users \ abc. Eu preciso do link simbólico de c: \ Users \ phi \ hello para c: \ Users \ abc \ hello.

Eu executo o seguinte comando

mklink c: \ Usuários \ abc \ hello c: \ Usuários \ phi \ hello

Mas recebo o erro Acesso negado . A phi do usuário é Administradora, portanto, não tenho problemas em gravar arquivos em c: \ Users \ abc.

Por que é isso? Como mklink?

prosseek
fonte

Respostas:

28

Pontos importantes:

  1. Você precisa executar como administrador se o UAC estiver ativado. (ou pelo menos política de segurança para permitir a criação de links).
  2. A /Dopção precisa ser usada se o link for para o diretório.
  3. O primeiro parâmetro é um link, o segundo parâmetro é a pasta original.
  4. O link já não deveria existir.

Uso:

mklink /D c:\users\me\new_link\ c:\users\me\original_folder\
rpattabi
fonte
@LawrenceDol É certo dizer que para usuários não administradores, você precisa da permissão especial ( SeCreateSymbolicLinkPrivilege), enquanto que para usuários administrativos você precisa elevar com executar como administrador. Mas então é possível definir também SeCreateSymbolicLinkPrivilegeum usuário administrador e evitar a necessidade de elevar com executar como administrador? Esta pergunta: stackoverflow.com/questions/29956470/… indica que, para usuários administrativos não precisarem elevar, o UAC deve estar desativado.
CMCDragonkai
@CMCDragonkai: Não acho que a elevação seja necessária, mas ainda não testei isso. Parece-me que eu criei links usando uma conta de administrador em uma janela de comando normal antes e sempre deixo o UAC ativado.
Lawrence Dol
25

Encontrei uma resposta deste site . Em suma, eu deveria ter executado o cmd.exe como administrador.

prosseek
fonte
4
Para referência, isso também pode ser uma causa: superuser.com/questions/264181/…
Wouter
9
Se você tentar usar o parâmetro / H ao vincular pastas, obterá Acesso negado. Você precisa usar / D sozinho para pastas. É isso que está contido no link de Wouter. +1 a Wouter, obrigado companheiro! :)
CausingUnderflowsEverywhere
21

Observe que o mesmo erro será apresentado quando você tentar criar junções em unidades mapeadas . Eu estava arrancando meu cabelo com isso até encontrar os exemplos desta página em Links rígidos e junções do MSDN .

Resposta curta: você só pode usar o mklink em volumes locais.

rburte
fonte
esse link não é muito útil. (trocadilho não intencional)
rpattabi
Esta resposta não parece relevante para a pergunta.
Kreemoweet 3/11
2
@kreemoweet a resposta é relevante porque se você receber um erro "Acesso negado, quando eu vinculo o Windows 7", o motivo pode ser que você não está usando o comando em um volume local.
Reg Edit
Sim, você pode usar mklinkalém dos volumes locais. mklink /d link_name \\server\sharefunciona muito bem.
UnclickableCharacter
Você não pode fazê-los em uma unidade mapeada . Disco local -> Remoto? Sim. Festa como se fosse o Netware 2.x
rburte 05/07
15

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 usando secpol.mscpara definir Local Policies\User Rights Assignment\Create symbolic links.

Se o usuário estiver conectado no momento, precisará fazer logoff e logon novamente para poder criar links.

Observe o cuidado de que os links podem expor os pontos fracos da segurança em alguns aplicativos - não pesquisei quais seriam esses pontos fracos.

Lawrence Dol
fonte
Esta é a única resposta elegível para esse problema, pois qualquer resposta não está se resumindo ao âmago da questão. Pare de trabalhar como administrador! Essa é uma atitude muito XP-ish, demonstrando falta de conhecimento dos riscos à segurança que qualquer Windows é muito pronunciado.
Thomas Urban
9

Se você usa frequentemente o Linux, lembre-se de que os parâmetros são trocados no Windows.

Se você usar a ordem errada, também receberá um "Acesso negado". Porque você está tentando criar um link simbólico onde o original já existe.

Janelas: mklink /D link original

Linux: ln -s original link

Sascha
fonte
4

Eu estava entendendo isso porque acidentalmente corri mklink /Dcontra um arquivo. O link não estava aparecendo no explorer, mas no Windows Explorer. Usando o prompt de comando, excluí o link do diretório inválido original e o recriei sem a /Dopção

A propósito, eu estava recebendo o erro "Acesso negado", embora estivesse executando o cmd.exe como administrador.

Peter Joles
fonte
1

Além de executar mklinkcomo Administrador, você também deve ter permissões suficientes para a pasta de destino à qual está vinculando.

Martin Wildam
fonte
1

Se você executar:

mklink / j C: \ caminho_para_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 ...

Simons0n
fonte
3
Sim, mas cuidado : junções são muito mais mortais do que links de diretório físico. A exclusão de um link da linha de comando ou do explorer simplesmente remove o link, mas a exclusão de uma junção do explorer remove tudo no diretório e exclui a junção - OOPS. Use em mklink /D src tgtvez disso.
Lawrence Dol
0

Isso pode parecer estranho, mas verifique se o arquivo ou pasta ainda não existe que você está tentando criar. Às vezes, é fácil ignorar no prompt do cmd.

David d C e Freitas
fonte
0

Para diretórios você deve fazer:

mklink /D c:\Users\abc\hello c:\Users\phi\hello
Zequez
fonte