這個雷我踩了不下三次,寫下來記錄一下,C# 程式要取得當前目錄的方法我們下關鍵字搜尋可以搜出一堆解決方案,沒意外的話第一個搜尋結果通常是 Directory.GetCurrentDirectory 方法(System.IO) - MSDN - Microsoft,但是這個方法在程式是由 Windows 工作排程器(Task Scheduler)啟動的狀況下就不 Work 了。
很單純地我們就使用 Directory.GetCurrentDirectory()
來取得執行檔當前目錄,直接執行是沒什麼問題的。
但是我們用 Windows 工作排程器啟動程式,當前目錄就變成了 C:\WINDOWS\System32
,這不意外,因為 Windows 工作排程器的程式就是放在 C:\WINDOWS\System32 底下,當前目錄預設當然就是 C:\WINDOWS\System32。
解法一:設定啟動程式的開始位置
不想改程式的話,去設定啟動程式的開始位置就行了。
解法二:改用 Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
這個方法是萬解,直接取得目前執行組件的所在目錄,就不用擔心有其他種的啟動方式。