Quero criar um atalho do Windows, que abre javaw.exe
em umdestino variável. Este destino é o conteúdo da variável de ambiente do meu sistema %MY_OWN_JAVA_HOME%
.
Eu tentei fazer:
- clique com o botão direito na pasta (usando o Windows Explorer)
New
=>Shortcut
- destino:
%MY_OWN_JAVA_HOME%\bin\javaw.exe -cp ......
Next
,Finish
O problema é que a variável de ambiente écalculado no momento da criação. Quando abro as configurações desta variável de ambiente, oatualo valor da variável é usado.
Como mantenho a variável como destino do meu atalho?
Responder1
Você ainda poderá criar um atalho com variável de ambiente usando um objeto COM do VBScript ou PowerShell. O método "Criar atalho" (mais detalhes também para argumentosaqui) é capaz disso. Embora originalmente seja uma solução vbscript, você pode chamar isso em um prompt do PowerShell como este:
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("C:\Users\Public\Desktop\My Java Shortcut.lnk")
$Shortcut.TargetPath = "%MY_OWN_JAVA_HOME%\javaw.exe"
$Shortcut.Arguments = "-cp"
$Shortcut.Save()
Observe que os argumentos não vão no caminho de destino. Além disso, pode não funcionar se a sua variável de ambiente contiver espaços. A vantagem disso é que você tem um atalho real e não um wrapper; a desvantagem é que você nunca pode alterar esse atalho por meio da caixa de diálogo de propriedades. Assim que você fizer isso, a variável será substituída novamente.
Se você quiser um wrapper, eu também sugeriria um arquivo vbs que seja completamente silencioso. Crie um novo arquivo de texto e cole a linha
CreateObject("WScript.Shell").Run """%MY_OWN_JAVA_HOME%\bin\javaw.exe"" -cp", , False
lá e salve-o como "runmyjava.vbs" e crie o atalho para esse arquivo e ele não terá pop-ups pretos nem por uma fração de segundo. Observe o "" extra na frente, após o caminho para o executável. Eles só serão necessários se a variável de ambiente contiver espaços.
Responder2
Uma solução é usar um .lnk
arquivo de atalho criado no Windows XP. Esses atalhos manterão suas variáveis no destino do atalho - mesmo se você alterar o destino.
Outra solução é, conforme sugerido por @DavidPostill nos comentários, usar um arquivo em lote como este como destino de atalho:
@echo off
start "" "%MY_OWN_JAVA_HOME%\bin\javaw.exe" %*
Em seguida, selecione “Minimizar” nas opções de atalho.
Esta solução funciona bem, mas abre um pop-up cmd minimizado por um segundo.
Responder3
Crie um atalho onde 'Target' seja 'cmd /k' executando 'start "" /B' para executar seu aplicativo.
O processador de comandos (cmd) resolverá as variáveis de ambiente e fechará assim que a inicialização for concluída. Iniciar executará o aplicativo "sem" uma janela (embora ainda pisque para mim).
Notas:
- Comandoquer um único argumento para o programa (início) e os argumentos do programa
- Começarquer argumentos separados para o programa e os argumentos do programa
- %CD% irá resolver para o caminho 'Iniciar em' do atalho. Limpe 'Iniciar em' para %CD% para resolver o caminho do atalho.
- Se a linha de comando do Target for muito longa para o Explorer/WshShell, você precisará construir o atalho com outra biblioteca (por exemplo, liblnk) ou voltar a chamar um arquivo em lote separado.
cmd /k "<<START COMMAND>>"
cmd /k "start "" /B "<<PROGRAM>>" <<PROGRAM ARGUMENTS>>"
cmd /K "start "" /B "%MY_OWN_JAVA_HOME%\bin\javaw.exe" %*"
Responder4
Quero sugerir outra solução, que funciona no Windows Vista, embora não saiba se funciona nas versões mais recentes do Windows: Na minha experiência, a proteção contra gravação do arquivo .lnk sempre impedirá que as variáveis de destino/destino sejam expandidas. Eles geralmente são expandidos quando o .lnk é criado (ou quando é usado), mas podem ser reinseridos e mantidos protegendo o .lnk contra gravação antes de usá-lo (na próxima vez).