Desktop-Shortcut(Verknüpfung) erstellen

Hallo,

Ich wollte mal fragen ob jemand weiß wie man eine Verknüpfung zu einer Jar File erstellen kann…

Ich habe natürlich schon das Internet durchforstet, bin aber zu keinem hinreichenden Ergebnis gekommen… ;/ (Wenn ich mich irre so möge man einen passenden Link hier posten :slight_smile: )

Wenn möglich wäre Plattformunabhängig natürlich super, aber das ist vielleicht etwas viel verlangt… Sonst wäre Windows meine bevorzugte Ziel Plattform…

Vielen Dank für eure Hilfe

mir kommt da jshortcut in den Sinn. Ich kann dir aber nicht sagen ob das gut oder schlecht ist, ich habe damit selber noch nichts gemacht. Scheinbar lässt sich so etwas auch über Java Web Start erledigen. Unter Windows könntest du auch versuchen eine .lnk Datei nachzubauen/ vllt. auch mit einem batch Script zu erstellen.

Wenn du wirklich nur einen Link für die jar brauchst kannst du das mit NIO machen: [Files.createLink(Path, Path);](http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#createLink(java.nio.file.Path, java.nio.file.Path))

Also ich möchte einen shortcut haben…
Unter windows ist die Dateiendung dafür .lnk!

Also ich hab dafür bisher unter Windows diese exe verwendet: http://www.optimumx.com/downloads.html#Shortcut
Taugt für meine Hobby-Bedürfnisse, wobei ich mir die Lib von Klemenz noch mal anschauen werde.

Die Verwendung von createSymbolicLink/createLink von NIO hat soweit ich das jetzt testen konnte, den Nachteil das man unter Windows Java dafür mit Adminrechten ausführen müsste, genauso wie wenn man die entsprechenden Befehle in der Konsole eingeben würde. (Was für mich mit ein Grund war diese exe zu verwenden)

Auch wenn du den Benutzer auf den eigenen Desktop schreiben lässt? Weil hier hat er m.M.n. Schreibrechte. Der „Default“ Desktop für alle ist natürlich Tabu.

Genau das hab ich ausprobiert.

Kannst es gerne selbst asuprobieren:

Files.createSymbolicLink(new File("asdf.txt").toPath(), new File(desktop,"test").toPath());

Wirft diese Exception:

Exception in thread "main" java.nio.file.FileSystemException: asdf.txt: Dem Client fehlt ein erforderliches Recht.

würde hier auch (aus eigener erfahrung) zu JShortCut raten
jshortcut nutzt die win-api und einen von jna kopierten loader-code um die lib zur laufzeit zu laden … ist also sehr zuverlässig

als bevorzugten download empfehle ich das file jshortcut-0.4-oberzalek.jar
das einzige was man beachten muss ist das sourceforge es als .ZIP läd … also nach dem download noch manuell die endung .ZIP gegen .JAR austauschen

wenn man von ausgeht das dieser code nur in einer anwendung genutzt wird die eh mit vollen rechten als desktop-app ausgeführt wird (also nix mit applet oder webstart oder sonstiger sandbox) haut das auch soweit hin
mit einer sandbox (z.b. als webstart-app) schlägt natürlich das laden der native-lib fehl wenn die nötigen rechte im manifest fehlen
also drauf achten

was NIO angeht
ich habs jetzt nicht selbst ausprobiert … aber hier geht es nicht um verknüpfungen im sinne von windows .lnk-files … sondern um von unix bekannt sym- und hard-links … also einem verweis auf eine ziel-datei auf ebene des file-systems
klar wird sowas unter windows auch auf NTFS möglich (glaube erst ab ner bestimmten NTFS-/Win-version) … und wird wie unter unix vom file-system treiber umgesetzt … was unter windows grundsätzlich admin-rechte verlangt da es fast ein direkter call auf den NTFS-driver ist und damit sehr tief ins system geht
unter unix läuft sowas ja innerhalb der shell im userspace ab … darum dürfte es dort auch ohne root gehen

zur verlinkten exe kann ich jetzt nichts sagen … würde ich aber aus zwei simplen gründen nicht nutzen

  1. externes programm > könnte lizenz-probleme geben
  2. externes programm > externer call über ProcessBuilder … und das ist nun wirklich nicht im sinne von java

was unix angeht
es kommt auf den genutzten window-manager an
selbst wenn es einige gemeinsamkeiten zwischen verschiedenen managern geben könnte die alle auf X.11 basieren sollte man sich da genauer informieren
und dazu kommen dann noch die manager die nicht über X.11 laufen … und da dann was allgemeines zu finden dürfte schwierig werden

alleine das es vermutlich schon schwer genug wird unter einigen systemen den genauen typ und vor allem die version rauszubekommen rollt hier noch einen großen stein in den weg

alles in allem dürfte webstart hier die wohl beste variante sein

  1. man muss sich nicht selbst um updates kümmern sondern diese als entwickler nur bereit stellen
  2. solche sachen wie eben desktop-shortcuts werden von java übernommen
  3. umfangreiche api um “sicher” und “mit user-nachfrage” bestimmte dinge außerhalb der sandbox tun (wie z.b. lesen und schreiben von daten im lokalen file-system nach bestätigung durch den user)
  4. einfaches setup : der user klickt auf den jnlp-launch und den rest macht webstart … man spart sich das lästige “installieren” in dem sinne das es von java komplett übernommen wird
    andere bequeme vorteile für user und entwickler

und wer sagt das sowas nur für “kleinere” projekte taugen würde : guckt euch Jake2 an … kompletter Quake2 remake in java mit sogar extrem guter performance … also auch für spiele durch aus geeignet (hätte mojang lieber auch so machen sollen)

[QUOTE=Unregistered]würde hier auch (aus eigener erfahrung) zu JShortCut raten
jshortcut nutzt die win-api und einen von jna kopierten loader-code um die lib zur laufzeit zu laden … ist also sehr zuverlässig
[/QUOTE]
OK, dann probiere ich das mal… Ich hatte das auch schon gesehen, aber ich benutze ungerne externe Lib’s! So ganz genau warum weiß ich auch nicht :wink:
Funktioniert JShortCut eigentlich plattformunabhängig? Oder sollte ich für den Rest Files.createLink verwenden?
EDIT
Jetzt weiß ich wieder warum ich externe Lib’s nicht mag! Funktionieren nicht so richtig…
Weiß einer von euch vielleicht wie solche lnk-Dateien innen drin aussehen? Dann könnte ich mir meine eigene schreiben.

Witzig, weil ich das mit den Shortcuts extra brauchte um meinen eigenen Updater einfacher zu gestalten :slight_smile:

Webstart hat aber auch viele Tücken und Haken. Signierungen, Caching, um nur mal das Beispiel zu nennen. Ich würde jetzt nicht sagen „Ich will eine Desktop-Verknüpfung, deshalb nehme ich Webstart weil das das so schön macht“, das ist doch mit Kanonen auf Kolibris geschossen.
@IDC alle deine Fragen zu JShortcut werden doch hier beantwortet: GitHub - jimmc/jshortcut: Java/JNI interface to access Windows shortcuts
Wenn du die Bibliothek nicht einbinden möchtest, dann schau da halt nach wie sie es gemacht haben :wink: Aber Plattformunabhängig bist du damit nicht, nein.

Hab was gefunden, in einem anderen Forum… :o

Naja ich poste mal den Google Link:
https://www.google.de/search?q=how-to-create-shortcut-to-windows-application-.ink-in-java&oq=how-to-create-shortcut-to-windows-application-.ink-in-java&aqs=chrome..69i57.958j0j7&sourceid=chrome&espv=210&es_sm=122&ie=UTF-8#q=how+to+create+shortcut+to+windows+application+.ink+in+java

Ist ein Script hack der aber hervorragend funktioniert!!!

Nur wie mache ich es jetzt unter Mac und Unix?
Geht da Files.createLink??
EDIT
ln -s targetPath shortcutPath

Danke für eure Hilfe

Ich hab irgendwie so das Gefühl, dass sich keiner meinen Link angesehen hat. Mit Files.createLink erstellst du Plattformunabhängig einen (hard)link. Das sollte auch ohne spezielle Rechte laufen (im Gegensatz zu symlinks).

Doch hab ich hat nicht funktioniert…

Ist keine Fehlerbeschreibung. Was hat nicht funktioniert?

In dem Fall ist sie allerdings sehr genau…
Es ist nichts passiert!

Dann dürfteste was falsch gemacht haben. Poste mal ein KSKB, wie du es versucht hast.

Files.createLink(new File(System.getProperty("user.home")+"/Desktop/"+"VerknüpfungTest.lnk").toPath(), new File("Path/to/a/jar.jar").toPath());
Glaube ich…

na gehen wir den krams mal durch

#9

OK, dann probiere ich das mal… Ich hatte das auch schon gesehen, aber ich benutze ungerne externe Lib’s! So ganz genau warum weiß ich auch nicht
Funktioniert JShortCut eigentlich plattformunabhängig? Oder sollte ich für den Rest Files.createLink verwenden?
EDIT
Jetzt weiß ich wieder warum ich externe Lib’s nicht mag! Funktionieren nicht so richtig…
Weiß einer von euch vielleicht wie solche lnk-Dateien innen drin aussehen? Dann könnte ich mir meine eigene schreiben.

  1. ich hab doch geschrieben : „nutzt die WIN-API“ > es KANN also gar nicht plattformunabhängig sein wenn es eine bestimmte API eines bestimmten OS nutzt
  2. was genau heißt „funktioniert nicht so richtig“ ?
    ich hab den hinweis gegeben : file wird von teilweise als .ZIP geladen > muss manuell in .JAR korrigiert werden
    wenn das soweit getan wurde in den CP packen und man hat zugriff
  3. für die spec wie genau eine LNK aufgebaut ist guck bitte ins MSDN (M$ Dev Net)

Witzig, weil ich das mit den Shortcuts extra brauchte um meinen eigenen Updater einfacher zu gestalten

kann man machen … macht WebStart aber wie gesagt für einen sehr viel einfacher

#10

Webstart hat aber auch viele Tücken und Haken. Signierungen, Caching, um nur mal das Beispiel zu nennen. Ich würde jetzt nicht sagen „Ich will eine Desktop-Verknüpfung, deshalb nehme ich Webstart weil das das so schön macht“, das ist doch mit Kanonen auf Kolibris geschossen.

darum hab ich ja noch ein paar punkte aufgezählt was webstart noch für vorteile bringt
aber ja, ein großer nachteil wäre z.b. das eine webstart-app innerhalb der sandbox läuft, was man aber wie gesagt mit entsprechender API trotzdem gut nutzen kann

#11
der google-link bringt überhaupt nichts da daraus nicht klar wird welche seite du dann aufgerufen hast … hier wäre der direkte link sinnvoller gewesen
wenn es um den kram mit dem VBS-script geht : würde bei vielen nicht funktionieren da VBS blockiert / deaktiviert

#12

Ich hab irgendwie so das Gefühl, dass sich keiner meinen Link angesehen hat.

ich habe die doc gelesen … und mir ist auch der unterschied zwischen einer windows-LNK-verknüpfung und einem hard-/soft-link (sowie der unterschied zwischen diesen beiden) durch aus klar … und ich habe ja auch drauf hingewiesen … aber TO scheint es entweder nicht gelesen oder nicht verstanden zu haben

#17
@TO
noch mal zur verdeutlichung : Files.createLink() und Files.createSymbolicLink() haben NICHTS mit ener windows-verknüpfung zu tun … sondern mit sogenannten hard- und soft-links auf ebene des file-systems
lies dir dazu bitte mal die erklärung auf wiki durch

sowie dazu die erklärung was eine „richtige LNK-verknüpfung“ unter windows ist

deine code-zeile wird also wenn überhaupt einen sog. HARD-link erzeugen … und zwar „VerknüpfungTest.lnk“ mit dem ziel deines JAR … was aber wie gesagt NICHTS mit einer .LNK-verknüpfung im sinne windows zu tun hat
mal davon abgesehen das unter windows für LINKs, egal ob hard oder soft … grundsätzlich admin-rechte gebraucht werden da es wie gesagt über den NTFS-treiber läuft

wenn du noch mal ne erklärung willst wie du genau mit JShortCut umgehen musst kann ich dir gerne ein beispiel zusammen basteln … die lib richtig in dein projekt einbinden musst du dann schon selbst schaffen

[quote=Unregistered]ich habe die doc gelesen … und mir ist auch der unterschied zwischen einer windows-LNK-verknüpfung und einem hard-/soft-link (sowie der unterschied zwischen diesen beiden) durch aus klar … und ich habe ja auch drauf hingewiesen … aber TO scheint es entweder nicht gelesen oder nicht verstanden zu haben

#17
@TO
noch mal zur verdeutlichung : Files.createLink() und Files.createSymbolicLink() haben NICHTS mit ener windows-verknüpfung zu tun … sondern mit sogenannten hard- und soft-links auf ebene des file-systems[/quote]
Ich weiß das und ich hab das verstanden und ich hab das gelesen und dann hab ich mir eine andere Möglichkeit gesucht und gefunden! Welche das ist kann man gerne in meinem Google-Link nachlesen(es ist natürlich der oberste eintrag, dessen URL zu 90% mit der Google Suche übereinstimmt!!!
Ich wollte nur keinen Link zu einem Fremden Forum posten…

mit java ein vbs erstellen und drauf hoffen das man es ausführen kann … naja … ist für mich keine lösung sondern nur das suchen von ausflüchten weil man sich nicht intensiv genug / korrekt mit vorhandenen libs auseinander setzen will

und vbs hat wie gesagt so seine nachteile … wenn es nicht komplett deaktiviert oder blockiert wird