Umgebungsvariable in der .lnk-Verknüpfung

Umgebungsvariable in der .lnk-Verknüpfung

Ich möchte eine Windows-Verknüpfung erstellen, die sich öffnet javaw.exebeivariables Ziel. Dieses Ziel ist der Inhalt meiner Systemumgebungsvariable %MY_OWN_JAVA_HOME%.

Ich habe versucht:

  1. Rechtsklick in den Ordner (mit dem Windows Explorer)
  2. New=>Shortcut
  3. Ziel:%MY_OWN_JAVA_HOME%\bin\javaw.exe -cp ......
  4. Next,Finish

Das Problem ist, dass die Umgebungsvariablewird zum Zeitpunkt der Erstellung berechnet. Wenn ich die Einstellungen dieser Umgebungsvariable öffne, dannaktuellWert der Variablen wird verwendet.

Wie behalte ich die Variable als Ziel meiner Verknüpfung bei?

Antwort1

Sie sollten immer noch in der Lage sein, eine Verknüpfung mit Umgebungsvariable mithilfe eines COM-Objekts aus VBScript oder Powershell zu erstellen. Die Methode "Verknüpfung erstellen" (weitere Details auch zu ArgumentenHier) ist dazu in der Lage. Obwohl es sich ursprünglich um eine VBScript-Lösung handelt, können Sie diese von einer Powershell-Eingabeaufforderung aus wie folgt aufrufen:

$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()

Bitte beachten Sie, dass die Argumente nicht in den Zielpfad gehen. Außerdem funktioniert es möglicherweise nicht, wenn Ihre Umgebungsvariable Leerzeichen enthält. Der Vorteil dabei ist, dass Sie eine echte Verknüpfung und keinen Wrapper haben. Der Nachteil ist, dass Sie diese Verknüpfung niemals über den Eigenschaftendialog ändern können. Sobald Sie dies tun, wird die Variable wieder ersetzt.

Wenn Sie einen Wrapper möchten, würde ich auch eine VBS-Datei vorschlagen, die völlig geräuschlos ist. Erstellen Sie eine neue Textdatei und fügen Sie die Zeile ein

CreateObject("WScript.Shell").Run """%MY_OWN_JAVA_HOME%\bin\javaw.exe"" -cp", , False

dort hinein und speichern Sie es als „runmyjava.vbs“ und erstellen Sie die Verknüpfung zu dieser Datei, und es wird nicht einmal für den Bruchteil einer Sekunde ein schwarzes Popup geben. Beachten Sie das zusätzliche „“ vor dem Pfad zur ausführbaren Datei. Diese sind nur erforderlich, wenn die Umgebungsvariable Leerzeichen enthält.

Antwort2

Eine Lösung besteht darin, eine Verknüpfungsdatei zu verwenden .lnk, die in Windows XP erstellt wurde. Diese Verknüpfungen behalten Ihre Variablen im Verknüpfungsziel bei – auch wenn Sie das Ziel ändern.


Eine andere Lösung besteht, wie von @DavidPostill in den Kommentaren vorgeschlagen, darin, eine Batchdatei wie diese als Verknüpfungsziel zu verwenden:

@echo off
start "" "%MY_OWN_JAVA_HOME%\bin\javaw.exe" %*

Wählen Sie anschließend in den Verknüpfungsoptionen „Minimieren“ aus.

Diese Lösung funktioniert einwandfrei, öffnet aber für eine Sekunde ein minimiertes Cmd-Popup.

Antwort3

Erstellen Sie eine Verknüpfung, bei der „Ziel“ „cmd /k“ ist und „start "" /B“ ausgeführt wird, um Ihre Anwendung auszuführen.

Der Befehlsprozessor (cmd) löst die Umgebungsvariablen auf und schließt, sobald Start abgeschlossen ist. Start führt die Anwendung „ohne“ Fenster aus (bei mir blinkt sie jedoch immer noch).

Anmerkungen:

  • Cmdwill ein einzelnes Argument für das Programm (Start) und die Argumente des Programms
  • Startwill separate Argumente für das Programm und die Argumente des Programms
  • %CD% wird in den „Start in“-Pfad der Verknüpfung aufgelöst. Deaktivieren Sie „Start in“, damit %CD% in den Pfad der Verknüpfung aufgelöst wird.
  • Wenn die Zielbefehlszeile für Explorer/WshShell zu lang ist, müssen Sie die Verknüpfung mit einer anderen Bibliothek (z. B. liblnk) erstellen oder auf den Aufruf einer separaten Batchdatei zurückgreifen.
cmd /k "<<START COMMAND>>"

cmd /k "start "" /B "<<PROGRAM>>" <<PROGRAM ARGUMENTS>>"

cmd /K "start "" /B "%MY_OWN_JAVA_HOME%\bin\javaw.exe" %*"

Antwort4

Ich möchte eine andere Lösung vorschlagen, die unter Windows Vista funktioniert, obwohl ich nicht weiß, ob sie auch unter neueren Windows-Versionen funktioniert: Meiner Erfahrung nach verhindert ein Schreibschutz der .lnk-Datei immer, dass Zielvariablen erweitert werden. Sie werden oft erweitert, wenn die .lnk-Datei erstellt wird (oder wenn sie verwendet wird), aber sie können erneut eingefügt und dann beibehalten werden, indem man die .lnk-Datei vor der (nächsten) Verwendung mit einem Schreibschutz versieht.

verwandte Informationen