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();
}
'p.StartInfo.CreateNoWindow = false;를 설정해 보았습니까? ''~'로? – klennepette