寫了一個轉檔用的Console Application,執行時會將處理過程資訊寫入執行目錄下的Log檔以利偵錯,經手動測試一切良好。

將轉檔程式納入SQL Job排程的步驟,卻發現程式有執行,卻沒有產生Log檔。想了一下,推測是工作目錄問題,到Windows\System32目錄下一找,果然Log檔乖乖地躺在那裡。換句話說,當SQL Job呼叫轉檔程式時,工作目錄被指向System32,所以new StreamWriter("blah.txt")就變成System32\blah.txt。

以前要解決這類問題,我都會建立一個批次檔,然後在第一列執行CD(Change Directory)改變工作目錄,例如: DataConv.bat

CD D:\SchTasks\DataConv
DataConv.exe arg1

然後讓SQL Job改呼叫DataConv.bat檔,而不要直接執行DataConv.exe,以便掌控工作目錄指向檔案所在位置。這回,我決定學會怎麼讓DataConv.exe更聰明一點,自己把工作目錄切換到EXE檔所在位置,不要勞煩別人幫忙。

對好威的.NET來說,這肯定是小事一椿,這樣就行了:

            Directory.SetCurrentDirectory(
                Path.GetDirectoryName(
                    Assembly.GetExecutingAssembly().Location));

Comments

# by frank

感謝,第一篇看到您的文章就解決我的問題 連這種西狼骨頭您都知道 實在是太崇拜了(嬌羞狀).. XD

Post a comment