Quiero crear un acceso directo de Windows, que se abra javaw.exe
en undestino variable. Este destino es el contenido de la variable de entorno de mi sistema %MY_OWN_JAVA_HOME%
.
Intenté hacer:
- haga clic derecho en la carpeta (usando el explorador de Windows)
New
=>Shortcut
- destino:
%MY_OWN_JAVA_HOME%\bin\javaw.exe -cp ......
Next
,Finish
El problema es que la variable de entorno escalculado en el momento de la creación. Cuando abro la configuración de esta variable de entorno, entonces elactualSe utiliza el valor de la variable.
¿Cómo mantengo la variable como destino de mi acceso directo?
Respuesta1
Aún debería poder crear un acceso directo con una variable de entorno utilizando un objeto COM de VBScript o PowerShell. El método "Crear acceso directo" (más detalles también para argumentosaquí) es capaz de eso. Aunque originalmente era una solución vbscript, puedes llamarla desde un mensaje de 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()
Tenga en cuenta que los argumentos no van en la ruta de destino. Además, es posible que no funcione si su variable de entorno contiene espacios. La ventaja de esto es que tienes un atajo real, no un contenedor, la desventaja es que nunca podrás modificar este atajo a través de su cuadro de diálogo de propiedades. Tan pronto como haga esto, la variable se reemplazará nuevamente.
Si desea un contenedor, también sugeriría un archivo vbs que sea completamente silencioso. Crea un nuevo archivo de texto y pega la línea.
CreateObject("WScript.Shell").Run """%MY_OWN_JAVA_HOME%\bin\javaw.exe"" -cp", , False
allí y guárdelo como "runmyjava.vbs" y cree el acceso directo a ese archivo y no aparecerá ventanas emergentes negras ni siquiera por una fracción de segundo. Tenga en cuenta el "" adicional delante de la ruta al ejecutable. Solo son necesarios si la variable de entorno contiene espacios.
Respuesta2
Una solución es utilizar un .lnk
archivo de acceso directo creado en Windows XP. Esos atajos mantendrán sus variables en el destino del atajo, incluso si cambia el destino.
Otra solución es, como sugiere @DavidPostill en los comentarios, usar un archivo por lotes como este como destino de acceso directo:
@echo off
start "" "%MY_OWN_JAVA_HOME%\bin\javaw.exe" %*
Luego seleccione "Minimizar" en las opciones de acceso directo.
Esta solución funciona bien, pero abre una ventana emergente cmd minimizada por un segundo.
Respuesta3
Cree un acceso directo donde 'Destino' sea 'cmd /k' ejecutando 'start "" /B' para ejecutar su aplicación.
El procesador de comandos (cmd) resolverá las variables de entorno y se cerrará una vez que se complete el inicio. Inicio ejecutará la aplicación "sin" una ventana (aunque todavía parpadea para mí).
Notas:
- comandoquiere un único argumento para el programa (inicio) y los argumentos del programa
- Comenzarquiere argumentos separados para el programa y los argumentos del programa
- %CD% se resolverá en la ruta 'Iniciar en' del acceso directo. Borre 'Iniciar en' para que %CD% resuelva la ruta del acceso directo.
- Si la línea de comando de Target es demasiado larga para Explorer/WshShell, necesitará crear el acceso directo con otra biblioteca (por ejemplo, liblnk) o recurrir a llamar a un archivo por lotes separado.
cmd /k "<<START COMMAND>>"
cmd /k "start "" /B "<<PROGRAM>>" <<PROGRAM ARGUMENTS>>"
cmd /K "start "" /B "%MY_OWN_JAVA_HOME%\bin\javaw.exe" %*"
Respuesta4
Quiero sugerir otra solución, que funciona en Windows Vista, aunque no sé si funciona en versiones más nuevas de Windows: En mi experiencia, proteger contra escritura el archivo .lnk siempre evitará que se expandan las variables de destino/objetivo. A menudo se expanden cuando se crea el .lnk (o cuando se usa), pero se pueden reinsertar y luego mantener protegiendo el .lnk contra escritura antes de usarlo (la próxima vez).