2012-01-18 5 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)

희망이 있습니다.

관련 문제