Pfad / Autostart

harimau

Grünschnabel
Moin!

ich bin relativ neu was Java angeht. Also bitte Rücksicht nehmen.

Mein Problem:
Ich würde gerne beim starten des Programms selbiges in den (Windows) Autostart eintragen(Registry). Darüber gibt es ja schon so einiges bei Google usw. zu finden. Soweit auch kein Problem ... aber:
Gibt es unter Java eine Möglichkeit praktisch den Kommandozeilenstring mit dem die Anwendung gestartet wurde auszulesen? Bei meinem ersten Versuch habe ich einfach das Ausführungsverzeichnus (user.dir) verwendet. Das funktioniert aber nur solange wie das Programm auch in dem Verzeichnis gestartet wird in dem sich die jar (bzw. in meinem Fall die mit jsmooth erzeugte exe) befindet. Das ist leider nicht immer der Fall.

Ich arbeite eigentlich viel mit C++ ... dort steht ja im arg array beim starten der gesamte Aufruf den ich dann einfach in die Registry eintragen könnte. Bei Java hab ich bisher keine Möglichkeit gefunden da ran zu kommen.

Hat jemand Erfahrung damit? Ideen?

Danke schonmal ...
 
Hallo,

nur mal so ne Frage zum Verständis. Das Programm soll sich bei jedem Start in die Registry eintragen?

MFG

zEriX
 
Hallo,

nur mal so ne Frage zum Verständis. Das Programm soll sich bei jedem Start in die Registry eintragen?

MFG

zEriX

Richtig. Momentan wird es so gemacht. Vielleicht ändere ich das noch. Ich könnte auch prüfen ob es schon drinsteht, aber dann muss ich auch noch gucken ob sich der Pfad geändert hat. usw.

Gr. h.
 
Nochmal eine Frage. Du hast eine exe die dir das Programm startet. Dein Programm kann sich irgendwo auf der Festplatte befinden, aber du möchtest das Verzeichnis der exe haben, oder?

MFG

zEriX
 
Hmmmm ... sagen wir so ... das würde mich schon mal einen Schritt weiterbringen. Da das Jar file nicht in der exe verpackt ist, sondern nur von dieser aufgerufen wird kann das Programm auch direkt über das Jar file gestartet werden. Die optiimale lösung währe also irgendwie an den "Command line String" heranzukommen (wie in C).

Ach wie gesagt ... wenn ich den Pfad der exe herausfinden könnte, dann würde mich das schon mal wesentlich weitergringen.

Tatsächlich habe ich in der Zwischenzeit schon etwas gefunden was funktionieren sollte.

1) Ich erzeuge mir ein Dummy objekt und hole mir dann über class.GetResource() den pfad der Klasse. Dann muss ich mich noch bis zum Basisverzeichnis von JAR duchhangeln und ich habs.

2) Erstellen einer JNI dll die über WinApi Funktionen den Anwendungspfad bestimmt (weiss nicht mehr genau ... aber mit GetProcesSInfo oder so geht das mit Sicherheit).

Leider sind das beider keine schönen Lösungen für ein Problem das ich mich Sicherheit nicht alleine hab ... das muss doch auch schöner gehen?

Danke für die Mühr,
Gr. H.
 
Nochmal eine Frage. Du hast eine exe die dir das Programm startet. Dein Programm kann sich irgendwo auf der Festplatte befinden, aber du möchtest das Verzeichnis der exe haben, oder?

MFG

zEriX

Das ist eigentlich unerheblich. Die Exe befindet sich in dem selben Verzichnis wie die Jar. Ich kann das Teil also entweder ueber -

1)c:\irgend\ein\pfad> c:\pfad\zum\prog\app.exe

oder mit

2)c:\irgend\ein\pfad>java -jar c:\pfad\zum\prog\app.jar

starten. Wenn ich jetzt den Pfad zur exe haette waehre das schon mla phantastisch. Noch besser waehre es natuerlich, wenn ich irgendwie an den genauen Startstring (also z.B. "java -jar c:\pfad\zum\prog\app.jar") kommen koennte.

Aber nur mal so aus Interesse ... Ich bin doch nicht der einzige, der Autostart in seine Java Applikation einbauen moechte, oder? Ich mein wie wird das denn sonst gemacht?

Gr. H.
 
Gibt es unter Java eine Möglichkeit praktisch den Kommandozeilenstring mit dem die Anwendung gestartet wurde auszulesen? Bei meinem ersten Versuch habe ich einfach das Ausführungsverzeichnus (user.dir) verwendet. Das funktioniert aber nur solange wie das Programm auch in dem Verzeichnis gestartet wird in dem sich die jar (bzw. in meinem Fall die mit jsmooth erzeugte exe) befindet. Das ist leider nicht immer der Fall.

Was meinst du damit? Warum funktioniert das in deinem Fall nicht?

MFG

zEriX
 
Was meinst du damit? Warum funktioniert das in deinem Fall nicht?

MFG

zEriX

Naja ... am besten ein Beispiel:

1) Starten des programms "von hand" mit
c:\App>App.exe

2) Ich hole mir über "user.dir" das Verzeichnis und trage dann
System.getProperty("user.dir") + "\App.exe"
ein (oder so ähnlich)

3) In der Registry steht dann
"c:\App\App.exe"

4) Rechner neu starten

5) Beim starten wird dann wieder das selbe bemacht
System.getProperty("user.dir") + "\App.exe"

6) Da sich Windows aber zu diesem Zeitpukt nicht in "c:\App" befindet sonder das Arbeitsverzeichnis irgendwas mit "c:\Dokumente und Einstellungen\User" oder sowas ist steht danach in der Registry

7) "c:\Dokumente und Einstellungen\User\App.exe" ... was natürlich nicht funktioniert, da sich App.exe immer noch unter c:\App befindet.

Ich hoffe es ist klar geworden wo das Problem liegt?

Gr. H.
 
Schau mal hier
Java:
package de.tutorials;


public class JarFileLocationExample {
	
	
	public static void main(String[] args) throws Exception {
		String jarFileLocation = JarFileLocationExample.class
				.getProtectionDomain().getCodeSource().getLocation().toURI()
				.toString();
		System.out.println("Executing jar: " + jarFileLocation);
	}
}

So bekommst du den Pfad+den Namen des Jar-Files. Das müsste dir eigentlich weiterhelfen.

MFG

zEriX
 
Jo ... besten Dank. Sowas ähnliches hatte ich inzwischen auch schon genacht. Deine Lösung kommt allerdings mit 20% des Codes aus :)

Das wird funktionieren. Allerdings wundert es mich trotzdem etwas, daß mann da so einen "Handstand" machen muss um dranzukommen. Das is doch nichts besonderes was ich machen will.

Vielen Dank nochmal,

Gr. H.
 

Neue Beiträge

Zurück