Entwickler-Ecke
WinForms - Fehler bei Autostart wenn in Registry eingetragen
m.keller - Fr 14.02.14 16:33
Titel: Fehler bei Autostart wenn in Registry eingetragen
Hallo Entwickler,
nun bin ich schon seit drei Tagen auf der such für eine Lösung meines Problems.
Weder google kann mir wirklich helfen noch irgendwelche Programmänderungen :-(
Ich habe ein Software geschrieben die ich in der Registry für den Autostart eintrage.
Die Software Startet auch.
Nun muss ich eine Libary laden und aus dieser initialisieren.
Das Problem ist, bei diesem Vorgang gibt es ein Fehler.
Selbst den TraceListener erstellt meine Software nicht mehr.
Dies ist aber nur bei einem Starten von Windows.
Öffne ich die Software manuell funktioniert der Vorgang.
Wenn ich das automatisch initialisieren deaktiviere und aus der Registry starten lasse, dann manuell initialisiere habe ich das selbe Problem.
Lass ich die Software über den Startup Ordner starten funktioniert sie auch so wie vorgesehen.
Sind irgendwelche Service oder Schnittstellen das Problem, vielleicht noch nicht geladen oder so etwas?
Vielleicht habt ihr eine Idee um das Problem zu umgehen.
Vielen Dank schon mal
Christian S. - Fr 14.02.14 16:43
Hallo!
Wie lautet denn die Fehlermeldung? Oder bekommst Du die nicht zu Gesicht?
Wie gibst Du im Programm den Pfad zur Library an? Benutzt Du dort das aktuelle Verzeichnis? Das könnte beim Start durch die Registry anders sein, als man es erwartet.
Grüße
Christian
m.keller - Fr 14.02.14 16:47
Die Fehlermeldung wird von der Library selber erzeugt. Es ist eine die ein Zulieferer geschrieben hat.
dies liegt im selben Pfad wie meine .exe
Und ist mit Visual Studio 2008 mit als Verweis eingebunden.
Demnach muss eigentlich die Libary richtig geladen werden.
Nur das Initialisieren funktioniert aus dieser nicht.
Der Zulieferer konnte mir bis jetzt keine wirkliche Antwort drauf geben.
Ralf Jansen - Fr 14.02.14 17:15
Könnte mir vorstellen das der Arbeitsordner ein anderer ist wenn man seine Anwendung aus dem Autostart ausführt.
Starte doch mal deine Anwendung aus einer Kommandozeile während du nicht gerade im Programmordner bist. Wenns dann auch knallt liegst es vermutlich daran das die Library des Zulieferers selbst Abhängigkeiten hat die diese Library relativ zum Arbeitsordner suchst und nicht relativ zu seinem eigenen Lagerort.
m.keller - Mo 17.02.14 08:50
Hallo,
also laut Zulieferer, sucht die Libary in dem Ordner von wo aus die Software Startet wenn dort nichts zu finden ist in dem Userverzeichniss. Allerdings ist das was sie versucht zu finden in dem Ordner, von wo aus die Software Startet.
Oder kann es auch noch daran liegen, dass ich zur Zeit mit der Debugversion auf dem Embedded-System Teste, und nicht normal Installiert habe?
Ralf Jansen - Mo 17.02.14 11:40
Zitat: |
also laut Zulieferer, sucht die Libary in dem Ordner von wo aus die Software Startet wenn dort nichts zu finden ist in dem Userverzeichniss. Allerdings ist das was sie versucht zu finden in dem Ordner, von wo aus die Software Startet. |
Heißt für mich sie sucht im Autostart Ordner wenn aus dem Autostart gestartet wurde. Die Abhängigkeiten hast du da hin kopiert?
jaenicke - Mo 17.02.14 12:59
Dann setze doch beim Start (vor dem Laden der Bibliothek) das aktuelle Verzeichnis mit SetCurrentDir auf das korrekte Verzeichnis, in deinem Fall dann wohl das Verzeichnis der Anwendung, sprich ExtractFilePath(ParamStr(0)).
Ralf Jansen - Mo 17.02.14 13:17
Ich übersetz mal nach C# ;)
C#-Quelltext
1:
| Directory.SetCurrentDirectory(Application.StartupPath); |
m.keller - Mo 17.02.14 15:29
Aus dem Autostartordner funktioniert es ja...
Nur nicht mit der Möglichkeit aus der Registry.
jaenicke - Mo 17.02.14 15:32
m.keller hat folgendes geschrieben : |
Aus dem Autostartordner funktioniert es ja...
Nur nicht mit der Möglichkeit aus der Registry. |
Wenn das Programm aufgerufen wird, ist das aktuelle Arbeitsverzeichnis nicht das, in dem deine Anwendung liegt. Simulieren kannst du das, indem du in Delphi unter Start --> Parameter ein anderes Arbeitsverzeichnis angibst, z.B. c:\temp (natürlich ohne irgendwelche Dateien dorthin zu kopieren). Wenn deine Anwendung dann noch funktioniert, wird sie es im Autostart auch tun.
m.keller - Mo 17.02.14 16:46
Also wenn ich die Daten aus dem Ordner z.B. auf den Desktop aus den Debuggordner kopiere, und Manuell starte, dann funktioniert alles.
Gebe ich in der Registry den Pfad an, startet die Software, aber wie ich beschrieben habe, erstellt er z.B. kein TraceListener und kann die Libary nicht Initialisieren.
jaenicke - Mo 17.02.14 17:50
Wie startest du denn manuell? Per Doppelklick? Dass das kein Problem ist, ist klar.
Du musst wie schon mehrfach geschrieben das Arbeitsverzeichnis auf einen anderen als den Ordner deiner Anwendung setzen. Entweder in Delphi, wenn du von dort startest, oder z.B. in einer Verknüpfung mit deiner Anwendung.
Christian S. - Mo 17.02.14 17:52
@jaenicke: Das hier ist übrigens eine C#/.NET-Frage ;)
jaenicke - Mo 17.02.14 20:35
Das kommt davon, wenn man immer nur kurz reinschaut. :oops:
In Visual Studio geht das mit rechte Maustaste auf das Projekt rechts im Projektmappen-Explorer, Eigenschaften, dann links Debuggen und dann Arbeitsverzeichnis setzen.
m.keller - Di 18.02.14 18:27
Hallo,
es scheint mit dem Ordner verweis zu funktionieren.
Vielen Dank.
Da wäre ich sonst nicht drauf gekommen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!