2013-01-15 83 views
-1

我的C#應用​​程序創建一個批處理腳本,然後生成一個Process來執行這個腳本。調用Process.Start從一個Windows服務產生多個實例

此應用程序需要作爲Windows服務運行。此外,我還需要一個獨立模式,我將通過命令行參數指示這應該只運行一次並退出。

問題是,當我運行獨立版本時,我可以看到應用程序(啓動器)的多個實例正在生成。但是如果我要在Visual Studio中運行它,它就會執行一次並退出。

有人可以幫我理解發生了什麼嗎?

下面是與主()

static class Launcher 
{ 
    static void Main(String[] args) 
    { 
     if(args[0] == "/standalone") 
     { 
      using(MyService service = new MyService()) 
      { 
       service.StartService(); 
       service.StopService(); 
      } 
     } 
     else 
     { 
      System.ServiceProcess.ServiceBase[] ServicesToRun; 
      ServicesToRun = new System.ServiceProcess.ServiceBase[] 
      { new MyService() }; 
      System.ServiceProcess.ServiceBase.Run(ServicesToRun); 
     } 
    } 
} 

類的爲MyService類:

public partial class MyService : ServiceBase 
{ 
    protected override void OnStart(string[] args) 
    { 
     Process p = new Process(); 
     p.StartInfo.FileName = "C:\abc.bat"; 
     p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
     p.Start(); 
    } 

    protected override void OnStop() 
    { 
     // Log something 
    } 

    public void StartService() 
    { this.OnStart(null); } 

    public void StopService() 
    { this.OnStop() } 
} 
+0

您能否提供更多信息?當你說「應用程序的多個實例」時,你的意思是你的服務/控制檯應用程序,或者它產生了什麼?目前還不清楚你的問題是哪個。你能否顯示處理命令行標誌的代碼(運行一次並退出標誌)? – hatchet

+0

您能否發佈相關代碼? –

+0

感謝您的回覆。我已經更新了代碼結構。 – Krishter

回答

1

如果有多個實例,然後的Process.Start叫更多然後一次。我會建議您寫出日誌並跟蹤爲什麼您的process.start被多次調用

+0

記錄幫助。實際的問題是原始開發者的邏輯錯誤。謝謝! – Krishter