2015-10-28 9 views
1

Я создал одно приложение для Windows, которое должно запускаться каждый раз на рабочем столе. Для этого мы помещаем приложение в startup. Но из-за некоторых исключений или закрытия пользователя приложение окна закрывается.Запустить приложение Windows из службы Windows

Чтобы избежать этого, я написал службу Windows, он проверяет каждую минуту, работает ли приложение или нет. Если он закрыт, служба Windows запустит приложение.

Когда я отлаживаю службу Windows, приложение работает нормально. Но когда я сделал настройку службы. Служба работает каждую минуту, но приложение Windows не открывается.

код следующим образом:

void serviceTimer_Elapsed(object sender, EventArgs e) 
     { 
      try 
      { 
       bool isAppRunning = IsProcessOpen("App"); 
       if (!isAppRunning) 
       {      
        Process p = new Process(); 
        if (Environment.Is64BitOperatingSystem)       
         p.StartInfo.FileName = @"C:\Program Files (x86)\Creative Solutions\App\App.exe"; 
        else       
         p.StartInfo.FileName = @"C:\Program Files\Creative Solutions\App\App.exe"; 
        p.Start(); 


       } 
      } 
      catch (Exception ex) 
      { 
       WriteErrorLog("Error in service " + ex.Message); 
      } 
     } 

метод, чтобы проверить экземпляр работает или нет:

public bool IsProcessOpen(string name) 
     { 
      //here we're going to get a list of all running processes on 
      //the computer 
      foreach (Process clsProcess in Process.GetProcesses()) 
      {    
       if (clsProcess.ProcessName.Contains(name)) 
       { 
        //if the process is found to be running then we 
        //return a true 
        return true; 
       } 
      } 
      //otherwise we return a false 
      return false; 
     } 

Пожалуйста, кто может помочь, как решить эту проблему.

+1

Вы решить неправильные проблемы здесь. Если есть код, который всегда должен быть запущен, он должен быть в первую очередь сервисом. Если программа выходит из-за исключений - исправьте ошибки. Ваше текущее «решение» звучит так, как будто это еще хуже. –

+0

Я бы попытался перестроить ваш код, чтобы вы могли поместить код, который должен работать все время в службе. Если вашему коду нужен пользовательский интерфейс, вы все равно можете использовать его в качестве приложения, которое может быть открыто и закрыто по мере необходимости. Вы можете связаться с сервисом, используя что-то WCF. – AndrewJE

ответ

0

Это может быть достигнуто просто:
1) создание одного консольного приложения.
2) Установка и развертывание консольного приложения путем создания типа вывода в качестве приложения Windows из свойств.

код следующим образом:

static void Main(string[] args) 
     { 
      Timer t = new Timer(callback, null, 0, 60000); 
      Thread.Sleep(System.Threading.Timeout.Infinite); 
     } 

     // This method's signature must match the TimerCallback delegate 
     private static void callback(Object state) 
     { 
      try 
      { 
       bool isAppRunning = IsProcessOpen("APPName"); 
       if (!isAppRunning) 
       { 
        Process p = new Process(); 
        string strAppPath; 
        strAppPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles) + @"\FolderName\AppName.exe";      
        System.Diagnostics.Process.Start(strAppPath);      
       } 
      } 
      catch 
      { } 
     } 

     public static bool IsProcessOpen(string name) 
     { 
      //here we're going to get a list of all running processes on 
      //the computer 
      foreach (Process clsProcess in Process.GetProcesses()) 
      { 
       if (clsProcess.ProcessName.Contains(name)) 
       { 
        //if the process is found to be running then we 
        //return a true 
        return true; 
       } 
      } 
      //otherwise we return a false 
      return false; 
     } 
0

Попробуйте посмотреть на этот вопрос:

How can a Windows service execute a GUI application?

В вашем случае с P/Invoke

Однако, как указано, это плохой выбор дизайна.

Необходимый код должен запускаться в службе с использованием SCM, и любая конфигурация, требуемая или взаимодействующая с сервисом, должна быть размещена в отдельном клиентском приложении, общающемся через .. независимо от того, что вам нравится.

Смежные вопросы