Application.StartupPath ist ein anderer als CurrentDirectory nach Autostart des Programms - wie ändern?

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Application.StartupPath ist ein anderer als CurrentDirectory nach Autostart des Programms - wie ändern?

    Hey Freunde des Programmierens,

    mein Programm lasse ich per Autostart (Autostart-Eintrag in Registry --> "SOFTWARE\Microsoft\Windows\CurrentVersion\Run") automatisch mit Windows starten.
    Das Programm greift unter anderem auf ein paar Dateien zu, welche im gleichem Ordner liegen wie die Startdatei des Programms. (Bsp.: Desktop\MeinProgramm\MeinProgramm.exe).

    Nun ist mir aufgefallen, dass wenn das Programm per Autostart gestartet wird, "CurrentDirectory" ist "Windows\System32" und nicht wie es eigentlich sein soll, das gleiche wie "Desktop\MeinProgramm"("Application.StartupPath").

    Abgefragt habe ich es, wie folgt :

    Quellcode

    1. Label8.Text = Application.StartupPath
    2. Label9.Text = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)
    3. Label10.Text = AppDomain.CurrentDomain.BaseDirectory
    4. Label11.Text = System.IO.Directory.GetCurrentDirectory() '<--- ist anderer Pfad (System32) als das Programm
    5. Label12.Text = Environment.CurrentDirectory '<--- ist anderer Pfad (System32) als das Programm
    6. Label13.Text = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
    7. Label14.Text = System.IO.Path.GetDirectoryName(Application.ExecutablePath)


    Gibt es hier eine Abhilfe, dass auch "CurrentDirectory" der gleiche Pfad ist, wie "Application.StartupPath" wenn das Programm per Autostart gestartet wird?

    zauber777 schrieb:

    CurrentDirectory
    ist das Verzeichnis, das explizit ausgewählt wird, also variabel.
    Application.StartupPath ist das Verzeichnis, in dem das Programm liegt, also fest.
    Teste dies:

    VB.NET-Quellcode

    1. ListBox1.Items.Add(Environment.CurrentDirectory)
    2. Environment.CurrentDirectory = "c:\temp"
    3. ListBox1.Items.Add(Environment.CurrentDirectory)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    *unnötiges Vollzitat entfernt*

    Vielen Dank. Das hat mir geholfen.
    Ich habe nun in meinem Load das folgende eingefügt, somit funktioniert es nun so, wie es soll.

    Quellcode

    1. Environment.CurrentDirectory = Application.StartupPath

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Warum nimmst du nicht direkt Application.StartupPath?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @zauber777 Wozu brauchst Du denn diesen Pfad?
    Zur Bestimmung des Startverzeichnisses Deines Programms nimmst Du ausschließlich Application.StartupPath,
    sonstige Pfade je nach Herkunft und Zweck.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    zauber777 schrieb:

    welche im Pfad des Programms liegen
    Na also.
    Nimm Application.StartupPath und feddich. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!