A legutóbbi munkámban szeretnék készíteni egy kis eszközt az ügyfelek emlékeztetésére; Természetesen a winform programnak el kell olvasnia ugyanannak a könyvtárnak a konfigurációs fájlját, mint az alkalmazás (nem az exe.config fájlt);
Ahhoz, hogy elolvassam azt a könyvtárat, ahol az aktuális alkalmazás található, azonnal eszembe jutott a System.Environment.CurrentDirectory a jelenlegi munkakönyvtár megszerzéséhez. A program hibátlanul fut;
Amikor másnap reggel munkába mentem, megjelent: "Konfigurációs fájl hiányzik". Az alkalmazás hozzáadja a boot automatikus indítást. Ez az üzenet felugrik, hogy elolvassa a konfigurációs fájl hibáját, azonnal ellenőrizzék, hogy az alkalmazás könyvtárban lévő konfigurációs fájl önmagában törölt-e. Ellenőrizve azt tapasztaltam, hogy a fájl még mindig ott van, kiléptem a programból, és újra elindítottam
Még mindig rendben van, nem hiányzik felugró ablak olvasott profil. Aztán megnézhetem, hogy a boot bejegyzés útja nincs a könyvtárban? Az úti fájlt nézve minden rendben van. Kicsit összezavarodtál? Kijelentkeztem a számítógépről és próbáltam újraindítani, de még mindig felugrik, a konfigurációs fájl hiányzik. Az ok a nem talált út közvetlen magyarázatára
MessageBox-ban fut a program, és rájön, hogy az út valóban ez az út.
Add hozzá az üzenetdoboz kódot, és folytasd a teszt indítását. Amikor elindítottam, azt találtam, hogy a jelenlegi, felbukkanó könyvtár C:\Windows\System32 volt, és azonnal összedöbbent. Arra gondoltam, lehet, hogy Lao Tzu programja a system32-re futott? A regisztert nézem, és a sysetm32-ben nincs az alkalmazásom. Végül úgy gondoltam, hogy a kóddal kellene gond lennie, hogy megkapjuk az útvonalat.
Ismételt tesztelés után kiderült, hogy a System.Environment.CurrentDirectory valóban a jelenlegi könyvtár megkapására szolgál, de ha az A program B programot hívja, a B program pedig a System.Environment.CurrentDirectory segítségével kapja meg a könyvtárat. Ekkor a B programban megszerzett könyvtár már nem az a könyvtár, ahol a B alkalmazás található; Ez lesz az a könyvtár, ahol A található. Nem nehéz megtalálni, hogy a boot közben felbukkan cím C:\Windows\System32, mert a boot önindítási programot is egy Windows folyamat hívja.
Ezért, ha a winform program meg akarja szerezni azt a könyvtárat, ahol a jelenlegi alkalmazás található, akkor a legjobb, ha nem használja a System.Environment.CurrentDirectory rendszert. Ehelyett ez az: Application.StartupPath Így nem számít, ki hívja.
Tesztkód:
Áthelyezve:A hiperlink bejelentkezés látható.
|