Como posso iniciar uma aplicação através de um link simbólico do Windows?

3

Como desenvolvedor, eu instalo e executo muitos aplicativos. Para acessá-los a partir da linha de comando, o mecanismo usual para adicionar os aplicativos à variável de ambiente PATH. Tudo bem, mas leva a um caminho bagunçado, grande e impenetrável.

Eu quero arrumar isso com um único diretório, por exemplo, c:\dev que contém links simbólicos para todos os aplicativos. Eu posso criar os links simbólicos com o mklink, por exemplo mklink eclipse.exe c:\dev\eclipse\eclipse.exe .

Para o exemplo do Eclipse, quando tento o novo symlink, recebo um erro sobre uma biblioteca complementar. Para outros aplicativos (por exemplo, o Notepad ++), recebo um erro diferente.

NO ENTANTO, quando eu digito o mesmo caminho diretamente na linha de comando, por exemplo c:\dev\eclipse\eclipse.exe tudo funciona.

Assim, um link simbólico eclipse.exe => c:\dev\eclipse.exe é diferente de c:\dev\eclipse.exe normal. Eu estava esperando (suspiro) e assumindo (doh!) Que o link simbólico funcionaria da mesma forma que digitar diretamente o caminho completo.

IOW, por que symlink => c:\dev\eclipse.exe não é equivalente a digitar c:\dev\eclipse.exe ?

Existe alguma maneira de contornar isso? Eu sei que posso escrever pequenos arquivos em lote, mas eu esperava evitar isso (links simbólicos parecem mais limpos).

Isto é uma idiossincrasia do Windows ou o Linux é o mesmo?

    
por David Kerr 13.06.2015 / 12:04

2 respostas

4

Deixe-me ilustrar o problema com um exemplo. Eu criei um arquivo em lote simples de uma linha Test.bat em C:\Program Files com o seguinte conteúdo:

@echo Batch dir = "%~dp0"

Agora, de D:\ , se eu invocar o arquivo em lote com C:\Program Files\Test , ele diz:

Batch dir = "C:\Program Files\"

Se eu modificar o PATH usando set path=%path%;C:\Program Files e invocar o arquivo em lote com um simples Test , ele diz:

Batch dir = "C:\Program Files\"

Finalmente, se eu criar um link simbólico usando mklink Test.bat "C:\Program Files\Test.bat" e invocá-lo com um simples Test , ele diz:

Batch dir = "D:\"

Como você pode ver, o diretório de trabalho atual é diferente neste caso. Não é de admirar que seus aplicativos estejam reclamando de arquivos que eles esperam que estejam faltando no diretório do executável.

Se você não quiser adicionar muitos diretórios ao PATH, basta adicionar um que contenha arquivos em lote para cada um dos seus aplicativos.

    
por 13.06.2015 / 12:28
1

2 boas respostas já explicam o que acontece. A melhor maneira de resolver isso é não criar um link simbólico em sua pasta c: \ dev, mas criar um arquivo .cmd ou .bat na sua pasta c: \ dev e colocar instruções lá para iniciar o arquivo real.

Você usa o Eclipse como exemplo, então eu também usarei esse.

Em c: \ dev, você cria um arquivo chamado eclipse.bat com o seguinte conteúdo:

@echo off
start "c:\dev\eclipse\eclipse.exe %*"

ou se você precisar definir o caminho porque o programa não pode encontrar seus arquivos, use:

@echo off
cd /d c:\dev\eclipse
start "eclipse.exe %*"

Agora, se você digitar eclipse, primeiro procurará um eclipse.exe no diretório atual. Ele não o encontra, então ele tenta eclipse.com, .bat e .cmd no diretório de trabalho atual. Não acha isso, então expande a pesquisa na mesma ordem para o caminho. Ele encontrará c: \ dev \ eclipse.bat e executará isso, o que você deseja fazer.

Note que eu uso start no arquivo .bat para que você receba o prompt de comando de volta depois de iniciar o aplicativo. Em alguns casos isso é necessário, especialmente quando se trabalha com programas que suportam opções de linha de comando.

EDIT: adicionado o% * para adicionar suporte de parâmetro. É opcional, mas assim você pode usá-lo. EDIT2: adicionou 2 arquivos .bat diferentes para que você possa ver qual funciona melhor para você. tnx DanielB pela sugestão.

    
por 13.06.2015 / 12:46