我想啟動2個相關的應用程序。首先,我想啟動我的“服務”應用程序,然后啟動我的“客戶端”應用程序。它并不能始終如一地發揮作用。有時客戶端啟動太快而最終無法連接到服務。有人可以告訴我哪里需要更改代碼才能正常工作并且只有在服務完全啟動后才啟動客戶端嗎?public class Program{public static void Main(string[] args){ Console.WriteLine("Starting Service"); StartService(); if (IsServiceRunning()) { Console.WriteLine("Starting Client"); StartClient(); } Console.ReadLine();}private static void StartClient(){ ProcessStartInfo startInfo = new ProcessStartInfo() { WorkingDirectory = @"C:\Client", FileName = "Client.exe" }; Process.Start(startInfo);}private static bool IsServiceRunning(){ Console.WriteLine("Check to see is running..."); Process[] pname = Process.GetProcessesByName("MyCommonService"); int runningCheck = 0; if (pname.Length == 0 || runningCheck < 10) { Console.WriteLine("Did not find the process. Check again..."); runningCheck += 1; Thread.Sleep(250); IsServiceRunning(); } Thread.Sleep(1000); return true;}private static void StartService(){ Console.WriteLine("Starting Service"); ProcessStartInfo startInfo = new ProcessStartInfo() { WorkingDirectory = @"C:\Service", FileName = "MyCommonService.exe" }; Process.Start(startInfo);}}
1 回答

慕哥6287543
TA貢獻1831條經驗 獲得超10個贊
看起來這始終取決于服務“完全啟動”所需的時間。如果服務需要執行網絡操作才能“完全啟動”,您可能無法保證服務何時“完全啟動”。您可以使用進程間通信,而不是簡單地等待 3,500 毫秒。
2 個 C# 進程之間進行進程間通信的最簡單方法是什么?
基本思想是讓您的服務進程與您的程序進行通信,如果它返回一個顯示服務已啟動的字符串,則僅啟動您的客戶端進程。
- 1 回答
- 0 關注
- 137 瀏覽
添加回答
舉報
0/150
提交
取消