Programmabsturz bei Autostart durch Registry. Funktioniert nur mit Verknüpfung im Autostartordner
Hallo zusammen,
ich habe ein mehrwürdiges Verhalten mit meinem kleinen .Net basierten Tool.
Die ganze Zeit habe ich dieses auf verschiedenen Systemen einfach im Autostart verknüpft und es gab keine Probleme.
Nun habe ich eine Option eingefügt die unter "Lokal User" ....."run" einen Registryeintrag einfügt.
Soweit, so gut.
Das Programm startet bei normaler Ausführung durch den Benutzer zuverlässig. Auch per Debug im VS.
Wenn man nun jedoch das System neu startet und das Tool über die Registry gestartet wird, hängt es sich auf, bzw wird nicht gestartet.
Verknüpft man es alternativ im Autostartordner, funktioniert alles super.
Nun zur eigentlichen Frage:
Was ist anders, wenn ein Programm durch die Registry automatisch gestartet wird?
ich habe ein mehrwürdiges Verhalten mit meinem kleinen .Net basierten Tool.
Die ganze Zeit habe ich dieses auf verschiedenen Systemen einfach im Autostart verknüpft und es gab keine Probleme.
Nun habe ich eine Option eingefügt die unter "Lokal User" ....."run" einen Registryeintrag einfügt.
Soweit, so gut.
Das Programm startet bei normaler Ausführung durch den Benutzer zuverlässig. Auch per Debug im VS.
Wenn man nun jedoch das System neu startet und das Tool über die Registry gestartet wird, hängt es sich auf, bzw wird nicht gestartet.
Verknüpft man es alternativ im Autostartordner, funktioniert alles super.
Nun zur eigentlichen Frage:
Was ist anders, wenn ein Programm durch die Registry automatisch gestartet wird?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 317033
Url: https://administrator.de/contentid/317033
Ausgedruckt am: 24.11.2024 um 04:11 Uhr
16 Kommentare
Neuester Kommentar
Guten Morgen!
Public Shared Function ExtractAssociatedIcon ( filePath As String) As Icon
Also doch ein relativer Pfad "icon.ico"
- ist da schon etwas besser.
Wenn du nun per Registry ein anderes Programm startest (also deine exe), dann stehen die Infos des Explorer nicht zur Verfügung und du musst in der exe alle Pfade absolut mit Laufwerkbuchstaben angeben.
Wenn du aber aus der Registry startest kannst du dir das Icon ohnehin sparen oder die Zeile einfach in TRY-CATCH kapseln und den Fehler verwerfen.
Gruß
Eisbein
Public Shared Function ExtractAssociatedIcon ( filePath As String) As Icon
Also doch ein relativer Pfad "icon.ico"
Icon icon = Icon.ExtractAssociatedIcon(Path.GetDirectoryName(Application.ExecutablePath) & "icon.ico")
Wenn du nun per Registry ein anderes Programm startest (also deine exe), dann stehen die Infos des Explorer nicht zur Verfügung und du musst in der exe alle Pfade absolut mit Laufwerkbuchstaben angeben.
Wenn du aber aus der Registry startest kannst du dir das Icon ohnehin sparen oder die Zeile einfach in TRY-CATCH kapseln und den Fehler verwerfen.
Gruß
Eisbein
Icon icon = Icon.ExtractAssociatedIcon(Path.GetDirectoryName(Application.ExecutablePath) & "icon.ico")
Da fehlt ein Backslash und das & durch ein + ersetzen, ist ja C# und nicht VB Icon icon = Icon.ExtractAssociatedIcon(Path.GetDirectoryName(Application.ExecutablePath) + @"\icon.ico")
R.
Hallo!
@131026
Ja, Anpassungen sind noch nötig.
@smarthomeben
GetFullPath - Nun da ist Windows etwas eigen, je nachdem welche OS und Framework verwendet wird bzw. bei Registry-Start.
Es gibt da mehrere Möglichkeiten den Pfad der exe zu erhalten, sagt Tante Google.
Ich bin mit dieser Methode einstweilen immer ausgekommen
Gruß
Eisbein
@131026
Ja, Anpassungen sind noch nötig.
@smarthomeben
GetFullPath - Nun da ist Windows etwas eigen, je nachdem welche OS und Framework verwendet wird bzw. bei Registry-Start.
Es gibt da mehrere Möglichkeiten den Pfad der exe zu erhalten, sagt Tante Google.
Ich bin mit dieser Methode einstweilen immer ausgekommen
Gruß
Eisbein
Hallo!
Wie bereits gesagt ist da Windows sehr eigen was die unterschiedlichen OS betrifft.
Lass dir am besten mal den Pfad ausgeben, den du durch Path.GetDirectoryName(Application.ExecutablePath) erhältst.
Kann durchaus sein, dass da XP ein anderes oder gar kein Ergebnis liefert. Dann musst du eine andere Variante testen:
zb:
- wie gesagt, Google liefert das viele Vorschläge.
Gruß
Eisbein
Wie bereits gesagt ist da Windows sehr eigen was die unterschiedlichen OS betrifft.
Lass dir am besten mal den Pfad ausgeben, den du durch Path.GetDirectoryName(Application.ExecutablePath) erhältst.
Kann durchaus sein, dass da XP ein anderes oder gar kein Ergebnis liefert. Dann musst du eine andere Variante testen:
zb:
System.Windows.Forms.Application.StartupPath.
//oder//
Path.GetDirectoryName
//oder//
AppDomain.CurrentDomain.BaseDirectory
Gruß
Eisbein
Icon mytrayicon = new Icon(Path.GetDirectoryName(Application.ExecutablePath) + @"\icon.ico")
Theoretisch könnte ich mir doch auf diese Weise das Icon im Programmordner ersparen, wenn ich es aus der selbigen .exe wieder raushohlen kann, oder?
Jepp. Weise deiner Anwendung ein Icon zu und nutze bei deiner oben genutzten Methode ExtractAssociatedIcon einfach den Pfad zu deiner EXE als Parameter, dafür wurde diese Methode ja eigentlich auch erdacht Du kannst aber auch direkt auf die Icon-Ressource deiner EXE zugreifen wenn du sie als embedded Ressource in die Anwendung einbettest.
Ist hier auch eine absolute Pfadangabe notwendig/möglich?
Nein, solche Ressourcen werden normalerweise beim kompilieren direkt in die EXE eingebettet.