2012-01-18 10 views
0

Windowsサーバー上で動作するWindowsサービスを開発しました。このサービスの目的は、Javaベースのスレッドをさらに実行するローカルシステム上でバッチファイルを実行することです。問題は、リモートセッションを使用してサーバーにログインすると、サービスは正常に開始されますが、バッチファイルとJavaスレッドはバックグラウンドで実行されますが、リモートセッションを使用せずにサーバーにログインすると、 Javaスレッドとバッチファイルウィンドウが表示されます。私の質問は、リモートセッションを使用してサーバーにログインすると、バッチファイルとJavaスレッドがバックグラウンドで実行されないようにする方法です。バッチファイルを実行するコードを下に追加されます:あなたのコードではバッチファイルを実行するWindowsサービス

public void RunBatchFile() 
     { 
      while (!this.isStopped) 
      { 
       while (StartnStop) 
       { 
        foreach (object element in apps) 
        { 
         App_arr chkapp = (App_arr)element; 

         System.DateTime now_date = System.DateTime.Now; 
         System.DateTime last_date = new System.DateTime(chkapp.last_time.Year, chkapp.last_time.Month, chkapp.last_time.Day, chkapp.last_time.Hour, chkapp.last_time.Minute, chkapp.last_time.Second); 

         System.TimeSpan time_span = now_date.Subtract(last_date); 


         if (time_span.Minutes >= chkapp.mins) 
         { 
          try 
          { 
           p = new Process(); 

           string targetDir = string.Format(@chkapp.app_path.ToString().Substring(0, chkapp.app_path.ToString().LastIndexOf("\\"))); 
           p.StartInfo.WorkingDirectory = targetDir; 
           string batch_file_name = chkapp.app_path.ToString().Substring(chkapp.app_path.ToString().LastIndexOf("\\") + 1); 
           p.StartInfo.FileName = batch_file_name; 

           p.StartInfo.Arguments = string.Format("C-Sharp CTF-Service Application"); 
           p.StartInfo.CreateNoWindow = false; 
           //p.StartInfo.WindowStyle = ProcessWindowStyle.Maximized; 
           p.Start(); 


          } 
          catch (Win32Exception ex1) 
          {        
           log.WriteEntry(ex1.Message + "\n" + ex1.StackTrace, EventLogEntryType.Error); 
           sw.BaseStream.Seek(0, SeekOrigin.End); 
           sw.WriteLine(ex1.Message); 
           sw.Flush(); 
          } 
         } 
        } 
        Thread.Sleep(40000); 
       } 
      } 
      fs.Close(); 

     } 
+2

'p.StartInfo.CreateNoWindow = false;を設定しようとしましたか? 'を'真 'にする? – klennepette

答えて

0

p.StartInfo.Arguments = string.Format("C-Sharp CTF-Service Application"); 
p.StartInfo.CreateNoWindow = true; //Instead of false 
//Try this if above line doesn't work 
p.StartInfo.UseShellExecute = false; 

注:UserNamePassword性質がないされていない場合は

CreateNoWindowプロパティ値は無視され、新しいウィンドウが作成されます。 (MSDN

希望します。

関連する問題