Verknüpfung einer .jar-Datei (liegt z. B. auf dem Desktop) im Autostart-Ordner erstellen?

  • Themenstarter Themenstarter Gelöschtes Mitglied 67123
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 67123

Gast
Folgendes habe ich ausprobiert:
Java:
File sourceFile = new File(FileSystems.getDefault().getPath("").toAbsolutePath() + "\\Programm.jar");
File destinationFile = new File(System.getProperty("user.home") + "\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup");
       
try {
        Files.createLink(sourceFile.toPath(), destinationFile.toPath());                  (1)
         //Files.copy(sourceFile.toPath(), destinationFile.toPath(), REPLACE_EXISTING);   (2)
} catch (AccessDeniedException ade) {
         System.out.println("Zugriff verweigert");
}
Bei Nummer (1) und (2) kommt dann jeweils Zugriff verweigert. Bedeutet vielleicht, dass ich Administratorrechte benötige oder nicht?
Wie löse ich das Problem?

Vielen Dank.
 
1. Du hast dem Link keinen Namen gegeben, bzw. aktuell würdest du versuchen, das Verzeichnis durch einen Link zu ersetzen.
Meines Wissens darfst du das Verzeichnis "Startup" nämlich nicht durch einen Link ersetzen.

2. Du hast Source und Target verwechselt.
Source ist der Name des Links
Target ist der Name des File-Objects, auf das der Link verweisen soll.

3. Dieser Java-Befehl erstellt keine Windows .lnk Dateien/Verknüpfungen, sondern eine sog. Symbolische Verknüpfung, ähnlich dem "mklink" Befehl (ob hard oder soft weiß ich gerade nicht, vielleicht geht beides per Parameter).

Wenn du Windows Links erstellen willst, wirst du dich nach was Anderem umsehen müssen. Diese unterstützen z.B. Befehlszeile, Ausführungsort, Komparibilitätseinstellungen usw.
Vielleicht gibt's ja ein Projekt dafür, google mal. Ansonsten musst du wohl Befehle in der Shell32 ausführen.

4. weiß ich nicht, ob ein .lnk auf eine Jar-Datei im Startmenü denn auch den Aufruf von "java.exe" auslösen würde. Das wirst du dann schon noch rausfinden. Aber ich denke, du müsstest den Link auf java.exe mit Parameter -jar "thisismyjarpath.jar" verwenden.


In Summe:
Dein Zugriffsproblem kommt wohl daher, dass du versucht hast, die aktuell ausgeführte Jar durch einen symbolischen Link auf das Startup-Verzeichnis zu ersetzen.
 
Zuletzt bearbeitet:
1. Du hast dem Link keinen Namen gegeben, bzw. aktuell würdest du versuchen, das Verzeichnis durch einen Link zu ersetzen.
Meines Wissens darfst du das Verzeichnis "Startup" nämlich nicht durch einen Link ersetzen.

2. Du hast Source und Target verwechselt.
Source ist der Name des Links
Target ist der Name des File-Objects, auf das der Link verweisen soll.

3. Dieser Java-Befehl erstellt keine Windows .lnk Dateien/Verknüpfungen, sondern eine sog. Symbolische Verknüpfung, ähnlich dem "mklink" Befehl (ob hard oder soft weiß ich gerade nicht, vielleicht geht beides per Parameter).

Wenn du Windows Links erstellen willst, wirst du dich nach was Anderem umsehen müssen. Diese unterstützen z.B. Befehlszeile, Ausführungsort, Komparibilitätseinstellungen usw.
Vielleicht gibt's ja ein Projekt dafür, google mal. Ansonsten musst du wohl Befehle in der Shell32 ausführen.

4. weiß ich nicht, ob ein .lnk auf eine Jar-Datei im Startmenü denn auch den Aufruf von "java.exe" auslösen würde. Das wirst du dann schon noch rausfinden. Aber ich denke, du müsstest den Link auf java.exe mit Parameter -jar "thisismyjarpath.jar" verwenden.


In Summe:
Dein Zugriffsproblem kommt wohl daher, dass du versucht hast, die aktuell ausgeführte Jar durch einen symbolischen Link auf das Startup-Verzeichnis zu ersetzen.
Stimmt, den Dateinamen sollte man natürlich setzen xD
 
1. Du hast dem Link keinen Namen gegeben, bzw. aktuell würdest du versuchen, das Verzeichnis durch einen Link zu ersetzen.
Meines Wissens darfst du das Verzeichnis "Startup" nämlich nicht durch einen Link ersetzen.

2. Du hast Source und Target verwechselt.
Source ist der Name des Links
Target ist der Name des File-Objects, auf das der Link verweisen soll.

3. Dieser Java-Befehl erstellt keine Windows .lnk Dateien/Verknüpfungen, sondern eine sog. Symbolische Verknüpfung, ähnlich dem "mklink" Befehl (ob hard oder soft weiß ich gerade nicht, vielleicht geht beides per Parameter).

Wenn du Windows Links erstellen willst, wirst du dich nach was Anderem umsehen müssen. Diese unterstützen z.B. Befehlszeile, Ausführungsort, Komparibilitätseinstellungen usw.
Vielleicht gibt's ja ein Projekt dafür, google mal. Ansonsten musst du wohl Befehle in der Shell32 ausführen.

4. weiß ich nicht, ob ein .lnk auf eine Jar-Datei im Startmenü denn auch den Aufruf von "java.exe" auslösen würde. Das wirst du dann schon noch rausfinden. Aber ich denke, du müsstest den Link auf java.exe mit Parameter -jar "thisismyjarpath.jar" verwenden.


In Summe:
Dein Zugriffsproblem kommt wohl daher, dass du versucht hast, die aktuell ausgeführte Jar durch einen symbolischen Link auf das Startup-Verzeichnis zu ersetzen.
Ich stelle gar keinen Unterschied bei der Datei zwischen Files.createLink() und Files.copy() fest. Files.createSymbolicLink() ist denke ich mal hard, da sich der Pfad - wie bei einer richtigen Verknüpfung - nicht ändert, wenn die Datei, die geöffnet werden soll, verschoben wird.
Ich würde es einfach grob bei Files.copy() belassen und wenn StartWithWindows (in meinem Programm) nicht mehr ausgewählt ist, dann wird die Datei da raus gelöscht. Soweit ich weiß, haben ausführbare Dateien bzw. Nicht-Verknüpfungen nichts im Autostart verloren. Ich weiß nicht, ob das so ganz stimmt.
 
willst du jetz eigentlich für dein programm einen Installer schreiben oder das programm sollte installer als output raus liefern?
 
Ich stelle gar keinen Unterschied bei der Datei zwischen Files.createLink() und Files.copy() fest. Files.createSymbolicLink() ist denke ich mal hard, da sich der Pfad - wie bei einer richtigen Verknüpfung - nicht ändert, wenn die Datei, die geöffnet werden soll, verschoben wird.
Ich würde es einfach grob bei Files.copy() belassen und wenn StartWithWindows (in meinem Programm) nicht mehr ausgewählt ist, dann wird die Datei da raus gelöscht. Soweit ich weiß, haben ausführbare Dateien bzw. Nicht-Verknüpfungen nichts im Autostart verloren. Ich weiß nicht, ob das so ganz stimmt.
Copy: kopiert die Datei sie ist zweimal vorhanden wenn du in der einen was änderst ist nicht in der andern vorhanden.

Files.createLink() : ist ein Dateisystem link die Datei ist physikalisch in den Quellordner und in dem Ziel ist nur ein Link zu der Datei. Die Datei ist nur einmal vorhanden.
 
willst du jetz eigentlich für dein programm einen Installer schreiben oder das programm sollte installer als output raus liefern?
Angenommen, ich erstelle mit Rechtsklick > Verknüpfung erstellen eine Verknüpfung für das Programm xy.jar und verschiebe diese Verknüpfung in den Autostart-Ordner, damit durch die Verknüpfung das eigentliche Programm gestartet werden kann. Dabei gibt es das coole Feature, dass sich in der Verknüpfung das Ziel synchronisiert.
In Java kann ich zwar mit Files.createSymbolicLink() eine Art Verknüpfung erstellen, jedoch bleibt das Ziel statisch.

Da Du Installer gerade erwähnst: ich habe von einem Studenten gehört, dass man Programme, die in Java geschrieben sind, so exportiert, dass diese nicht als .jar-Datei erkennbar sind, sondern diese sind wie richtige Programme. Den Namen weiß ich nicht mehr, aber ich weiß, dass diese Datei statt (z. B.) 20 MB nur ein paar KB groß ist. Stimmt das bzw. inwiefern ist das richtig?
 
Copy: kopiert die Datei sie ist zweimal vorhanden wenn du in der einen was änderst ist nicht in der andern vorhanden.

Files.createLink() : ist ein Dateisystem link die Datei ist physikalisch in den Quellordner und in dem Ziel ist nur ein Link zu der Datei. Die Datei ist nur einmal vorhanden.
Ah okay, aber warum ist dann kein "Verknüpfungs-Symbol" an der Datei dran?
 
du hast immer deine jar.. Magie passiert nicht


Mit jpackqge kannst du dir einen installer ausgeben lassen der auf dem aktuellen Betriebssystem funktioniert
 
Das ist ja auch Sinn und Zweck der Sache.
Editier NACH dem Verknüpfen mal die Originaldatei, dann merkst du den Unterschied.
Soll sich das Symbol oder der Dateiname ändern? Da tut sich nichts. Vielleicht, weil der Dateiname mit
Java:
File sourceFile = new File(Main.class.getProtectionDomain().getCodeSource().getLocation().getFile());
File destinationFile = new File(System.getProperty("user.home") + "\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\Programm.jar");
Files.createLink(destinationFile.toPath(), sourceFile.toPath());
schon festgelegt wurde?

Wobei ich
Java:
File sourceFile = new File(Main.class.getProtectionDomain().getCodeSource().getLocation().getFile());
schreibe, damit der Dateiname der aktuell ausgeführten .jar-Datei keine Probleme macht, falls man ihn ändert (nicht währenddessen). Oder geht das noch besser?
 
Soll sich das Symbol oder der Dateiname ändern? Da tut sich nichts. Vielleicht, weil der Dateiname mit

Nein, Datei editieren, nicht ihren Namen (JARs sind ja ZIps, änder mal was im Manifest). Die Namen müssen so oder so passen. Ändert sich der Name der verlinkten Datei, musst du den Link ändern, das versteht sich wohl von selbst.
Wenn du eine Kopie anlegst, bleibt die Kopie unverändert. Bei einem Link ändert sich Inhalt des Links (wenn man das so sagen kann) mit.
 
Soll sich das Symbol oder der Dateiname ändern? Da tut sich nichts. Vielleicht, weil der Dateiname mit
Java:
File sourceFile = new File(Main.class.getProtectionDomain().getCodeSource().getLocation().getFile());
File destinationFile = new File(System.getProperty("user.home") + "\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\Programm.jar");
Files.createLink(destinationFile.toPath(), sourceFile.toPath());
schon festgelegt wurde?

Wobei ich
Java:
File sourceFile = new File(Main.class.getProtectionDomain().getCodeSource().getLocation().getFile());
schreibe, damit der Dateiname der aktuell ausgeführten .jar-Datei keine Probleme macht, falls man ihn ändert (nicht währenddessen). Oder geht das noch besser?
Teste es doch mal mit einer Text Datei. Es geht nicht um das Icon, Namen, ... sondern um den Inhalt der Datei beim oder nach den editieren hinzufügen von Text in der Text-Datei.

Link ist ein Pointer Zeiger auf eine Physikalische Datei auf der Festplatte.



Ja für das Erstellen eines Symbolik Link brauchst du Adminrechte auf einen Win Rechner.
 
Nachtrag ... Ein Hardlink müsste trotz Änderung des Dateinamens immer noch funktionieren, der funktioniert ja auch noch nach Löschen derselben. Da hab ich was falsches gesagt.
 
HardLink
Wird die Ogrinal Dadei gelöscht, sollte die Datei als Kopie in dem Link Ordner sein. Als echte Datei Copy.

Wird der Link gelöscht bleibt das Orginal an seiner Stelle.
 

Zurück
Oben