2012-11-20 124 views
0

我有一個用C#編寫的應用程序。基本上它是一個exe文件。此應用程序每隔3秒掃描一次網絡,並使用網絡信息填充數據庫。從asp.net調用exe文件mvc

我想從asp.net mvc運行這個應用程序幾秒鐘,然後停止它,並再次啓動和停止。

我需要點擊一個開始按鈕來啓動exe,並且需要點擊一個停止按鈕來停止它。該exe將不斷運行,直到我被調用後點擊停止按鈕。

是否有可能從asp.net mvc框架調用此exe文件?

如果是,那該怎麼辦?我需要一些指針。請提供我。

+0

這將幫助你http://stackoverflow.com/questions/5905180/executing-an-exe-from-asp-net – MVCKarl

+1

你是什麼意思開始和停止?如果你按原樣運行exe,它是否無限運行,每隔一段時間檢查一次網絡?你可以在你的asp.net代碼中使用Process.Start,但我不清楚你的需求的開始停止部分。 – ryadavilli

+0

我需要點擊一個開始按鈕來啓動exe,並且需要點擊一個停止按鈕來停止它。該exe將不斷運行,直到我被調用後點擊停止按鈕。 –

回答

0

您將需要命名空間System.Diagnostics & System.Timers。然後按照下面的步驟。

static System.Timers.Timer tTimer; 
    const Int32 iInterval = 30; 
    static Boolean IsProcessRunning = false; 
    static Int32 iProcessID = 0; 

    static Int32 SetTimerInterval(Int32 minute) 
    { 
     if (minute <= 0) 
      minute = 60; 
     DateTime now = DateTime.Now; 

     DateTime next = now.AddMinutes((minute - (now.Minute % minute))).AddSeconds(now.Second * -1).AddMilliseconds(now.Millisecond * -1); 

     TimeSpan interval = next - now; 

     return (Int32)interval.TotalMilliseconds; 
    } 

    static void timer_Elapsed(object sender, EventArgs e) 
    { 
     if (!IsProcessRunning) 
     { 
      ProcessStartInfo objStartInfo = new ProcessStartInfo(); 
      objStartInfo.FileName = "C:\\Windows\\notepad.exe"; 

      Process objProcess = new Process(); 
      objProcess.StartInfo = objStartInfo; 
      objProcess.Start(); 

      iProcessID = objProcess.Id; 
      IsProcessRunning = true; 
     } 
     else 
     { 
      Process objProcess = Process.GetProcessById(iProcessID); 
      objProcess.Kill(); 
      IsProcessRunning = false; 
     } 

     tTimer.Interval = SetTimerInterval(iInterval); 
    } 

然後在你的啓動按鈕,點擊...

tTimer = new System.Timers.Timer(); 
    tTimer.Interval = SetTimerInterval(iInterval); 
    tTimer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed); 
    tTimer.Start(); 

您可以隨時停止此...

tTimer.Stop(); 

,你準備好去...

+0

這不起作用 –