2012-02-22 14 views
2

アプリケーション(winform)を監視し更新するWindowsサービスを作成しようとしています。停止している場合や起動していない場合に起動します。しかし、それは、現在のコンソールユーザーとしてアプリケーションを実行する必要があります。 私の問題は、現在のユーザーが利用できないように、ネットワークサービスの資格情報でフォームを開始することです。Windowsサービスから現在のコンソール用にwinformを起動することは可能ですか

 protected override void OnStart(string[] args) 
    { 
     if (!GetProcessList()) 
     { 
      Process p = new Process(); 
      p.EnableRaisingEvents = true; 
      p.Exited += new EventHandler(p_Exited); 
      StartProcces(); 

     } 
     else 
     { 
      eventLog1.WriteEntry("Process is running"); 
     } 
    } 

    void p_Exited(object sender, EventArgs e) 
    { 
     StartProcces(); 
    } 
    static void StartProcces() 
    { 
     System.Diagnostics.ProcessStartInfo myProcess = new System.Diagnostics.ProcessStartInfo(@Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) + "\\WmiMonClient.exe"); 
     myProcess.WorkingDirectory = System.Reflection.Assembly.GetEntryAssembly().Location; 

     //set environment path   
     try 
     { 
      System.Diagnostics.Process.Start(myProcess); 
     } 
     catch (Exception ex) 
     { 


     } 
    } 
    private static bool GetProcessList() 
    { 
     bool proccesIsRunning = false; 
     Process[] processlist = Process.GetProcesses(); 

     foreach (Process theprocess in processlist) 
     { 
      if (theprocess.ProcessName == "WmiMonClient.exe") 
      { 
       proccesIsRunning = true; 
      } 
     } 
     return proccesIsRunning; 
    } 

    protected override void OnStop() 
    { 
    } 

答えて

0

これを攻撃する1つの方法は、上記のコードを実行するスケジュールタスク(Windowsスケジューラを使用)を作成することです。そうであれば、もう一度起動します。

これは既にユーザーコンテキストを実行しており、Windowsサービスからそれを考慮する必要がないという利点があります。

+0

これは1つの解決策 –

関連する問題