發表文章

目前顯示的是有「工作排程」標籤的文章

C# 使用 Process.Start 執行外部程式

圖片
C# 執行外部程式的方式並不難,也很簡單,首先引入 using System.Diagnostics; 然後使用 Process.Start( "OtherProgram.exe" ) 方式就可以呼叫並執行。 但是,某些情況下會導致程式無法被執行(或是無法正常執行), 很多原因在於『執行程式的起始位置』,由於被呼叫的程式執行時, 它所啟動的路徑其實是在呼叫程式的路徑下, 如果被呼叫程式需要讀取與程式相同路徑下的文件檔案(或是INI),可能會導致找不到的問題。 為了測試這樣的現象,我準備了2支程式, 一支是被呼叫端的程式 HelloConsole.exe 另外一支就是呼叫端程式 CallOtherProgram.exe HelloConsole.exe 這支程式 在啟動時會讀取相同路徑下的 Doc.txt 並將內容顯示出來,如果有參數也會把參數列出來。而這支程式我固定放在 D:\TEST\ 下,以方便測試,如果不是在這路徑下,那呼叫端的程式碼裡面的路徑也要變更。 HelloConsole.exe using System; using System.IO; namespace HelloConsole {     class Program     {         static void Main(string[] args)         {             Console.WriteLine("This is HelloConsole.exe");             Console.WriteLine(" ");             Console.WriteLine("Environment.CurrentDirectory is ");             Console.WriteLine(Environment.CurrentDirectory);             Console.WriteLine(" ");             Console.WriteLine("AppDomain.CurrentDomain.BaseDire

國道高速公路交通路況圖擷取小程式

圖片
這是一支專門下載國道高速公路交通路況圖的小程式。 程式下載: FreewayTrafficPics.zip 需要環境: dotNet Framework 4.5 、 dotNet Framework 4.5 語言套件 使用方式: 設定程式設定檔 FreewayTrafficPics.ini 裡面有個 SavePath 路徑,這個是你要儲存圖檔的路徑(該路徑資料夾必須先建立好,程式不會主動建立資料夾)。 設定 Windows 工作排程器,把程式放入排程,設定為每1分鐘執行一次(或5分鐘,程式會自動把缺少的檔案補齊)。 這個國道路況圖的路況,在 交通部高速公路局 發布,每分鐘更新一次圖檔,這個圖檔分成北中南 3 個區塊,檔案名稱命名規則如下: 北部:map_n_3_{分鐘}.jpg 中部:map_c_3_{分鐘}.jpg 南部:map_s_3_{分鐘}.jpg 圖片樣式如下: 北部 中部 南部 由我們的程式依照排程每分鐘去抓一次(原則上是抓前一分鐘比較不會有問題),抓到我們指定的資料夾: ※應用方式: 寫個主動式網頁,不管是透過 ajax 或是 refresh 或是 flash 方式都可以,輪播最新的北中南三個檔案就可以在畫面上讓使用者看到畫面了 下面是使用 HTML 展示的範例: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=big5" /> <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> <META HTTP-EQUIV="EXPIRES" CONTENT="Mon, 22 Jul 2002 11:12:01 GMT"> <META HTTP-EQUIV="PRAGMA" CONTENT=&

Microsoft Server 2008 / 2012 工作排程器 無法正常執行 C# [.NET] 程式

圖片
這個問題是我常常遇到的,很多時候寫Server端的程式通常是需要配合排程(工作排程器)執行的。 而這個工作排程器好似從2008以後的版本就跟2003有不少差異。 但就寫程式的工程師而言,有一個非常要注意的地方,那就是『程式執行位置』,底下演示一段程式碼來顯示 正常情況下 ,你的程式取得的程式所在位置資訊 我的程式位置在 D:\TEST 11\CnetAppPath string dir = System.Environment.CurrentDirectory; 位置: D:\TEST 11\CnetAppPath string dir = System.Windows.Forms.Application.StartupPath; 位置: D:\TEST 11\CnetAppPath string dir = System.IO.Directory.GetCurrentDirectory(); 位置: D:\TEST 11\CnetAppPath string dir = System.AppDomain.CurrentDomain.BaseDirectory; 位置: D:\TEST 11\CnetAppPath\ string dir = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase; 位置: D:\TEST 11\CnetAppPath\ string dir = System.Windows.Forms.Application.ExecutablePath; 位置: D:\TEST 11\CnetAppPath\AppPath.exe string dir = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName; 位置: D:\TEST 11\CnetAppPath\AppPath.exe string dir = this.GetType().Assembly.Location; 位置: D:\TEST 11\CnetAppPath\AppPath.exe 假設,我建立一個 捷徑 ,一般情況下捷徑裡面會有一個設定值『開始位置』