I mit seneste arbejde vil jeg lave et lille værktøj til kundepåmindelser; Naturligvis skal winform-programmet læse konfigurationsfilen i samme mappe som applikationen (ikke exe.config-filen);
For at læse mappen, hvor den aktuelle applikation er placeret, tænkte jeg straks på System.Environment.CurrentDirectory for at få den aktuelle arbejdsmappe. Programmet ser ud til at køre fejlfrit;
Da jeg kom på arbejde næste morgen, dukkede den op: "Læs konfigurationsfil mangler". Appen tilføjer boot-autostart. Denne meddelelse dukker op for at læse konfigurationsfilfejlen og straks tjekke, om konfigurationsfilen i applikationsmappen er blevet slettet af sig selv. Efter at have tjekket fandt jeg ud af, at filen stadig var der, og jeg afsluttede programmet og kørte det igen
Det er stadig fint, ingen pop-up læst profil mangler. Se så, om stien for boot-posten i registret ikke er i min mappe? Når jeg kigger på stifilen, er det i orden. Lidt forvirret? Log ud af computeren og prøv at genstarte, men stadig dukker konfigurationsfilen op. Årsagen til ikke at kunne finde vejen vil blive taget direkte
MessageBox kører programmet og finder, at stien faktisk er denne sti.
Tilføj MessageBox-koden og fortsæt med at starte testen. Da jeg startede op, opdagede jeg, at den nuværende mappe, der dukkede op, var C:\Windows\System32, og jeg blev straks forvirret. Jeg tænkte for mig selv, kunne det være, at Lao Tzus program gik ned til system32? Når jeg tjekker registreringsdatabasen, har sysetm32 ikke min app. Endelig tænkte jeg, at der burde være et problem med koden til at få stien.
Efter gentagne tests blev det konstateret, at System.Environment.CurrentDirectory faktisk skal hente den aktuelle mappe, men hvis program A kalder program B og program B bruger System.Environment.CurrentDirectory til at hente kataloget. Så er den mappe, der opnås i B-programmet, ikke længere den mappe, hvor B-applikationen er placeret; Det bliver det register, hvor A er placeret. Det er ikke svært at finde ud af, at den mappe, der dukker op, når jeg booter, er C:\Windows\System32, fordi boot-selvstartsprogrammet også kaldes af en proces i Windows.
Derfor, hvis winform-programmet ønsker at hente den mappe, hvor den aktuelle applikation er placeret, er det bedst ikke at bruge System.Environment.CurrentDirectory. I stedet er det: Application.StartupPath På denne måde er det ligegyldigt, hvem der kalder det.
Testkode:
Overført fra:Hyperlink-login er synlig.
|