我的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() }
}
您能否提供更多信息?當你說「應用程序的多個實例」時,你的意思是你的服務/控制檯應用程序,或者它產生了什麼?目前還不清楚你的問題是哪個。你能否顯示處理命令行標誌的代碼(運行一次並退出標誌)? – hatchet
您能否發佈相關代碼? –
感謝您的回覆。我已經更新了代碼結構。 – Krishter