Variável de ambiente no atalho .lnk

Variável de ambiente no atalho .lnk

Quero criar um atalho do Windows, que abre javaw.exeem umdestino variável. Este destino é o conteúdo da variável de ambiente do meu sistema %MY_OWN_JAVA_HOME%.

Eu tentei fazer:

  1. clique com o botão direito na pasta (usando o Windows Explorer)
  2. New=>Shortcut
  3. destino:%MY_OWN_JAVA_HOME%\bin\javaw.exe -cp ......
  4. 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 .lnkarquivo 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).

informação relacionada