2015-08-26 6 views
0

Я реализовал следующий код с событием Timer.Elapsed, которое запускает пакетный процесс и снимает снимок экрана с моего рабочего стола. Пакетный процесс выполняется отлично везде, кроме кода ElapsedHandler. Я знаю, что обработчик вызван правильно, потому что я добавил код для печати в файл, который отлично работает. Сам пакетный процесс никогда не выполняется. Я что-то пропустил о таймере, который вызывает проблему?C# Таймер пропущен Не работает пакетный процесс в службе Windows

using System; 
using System.IO; 
using System.Diagnostics; 
using System.Threading; 
using System.Timers; 
using System.Drawing; 
using System.Drawing.Imaging; 
using System.ServiceProcess; 

namespace ScreenCaptureService 
{ 
    public class ScreenCaptureService : ServiceBase 
    { 
     private const int durationInMinutes = 1; 
     private System.Timers.Timer t; 

     protected override void OnStart(string[] args) 
     { 
      t = new System.Timers.Timer((float)(1000)); 
      t.Elapsed += new ElapsedEventHandler(ElapsedHandler); 
      t.Enabled = true; 
     } 

     protected void ElapsedHandler(object sender, ElapsedEventArgs e) 
     { 
      string testpath = @"C:\Dump\new.txt"; 
      if (!File.Exists(testpath)) 
      { 
       File.CreateText(testpath); 
       using (StreamWriter sw = File.AppendText(testpath)) 
       { 
        sw.WriteLine("Initialized"); 
       } 
      } 
      else 
      { 
       using (StreamWriter sw = File.AppendText(testpath)) 
       { 
        sw.WriteLine("Hello " + DateTime.Now.ToString()); 
       } 
      } 
      Process.Start(@"C:\users\wyoung\screenshot.bat"); 
     } 

     protected override void OnStop() 
     { 
      t.Enabled = false; 
     } 
    } 
} 
+0

Что происходит, когда код достигает строки Process.Start при его отладке? – saarrrr

+0

И каково контролируемое поведение пакетного процесса? – saarrrr

+0

Хорошо, поэтому, если я запускаю его как консольное приложение, он работает отлично. Однако, как только я поместил его в службу Windows, он перестает работать. Странно то, что вывод txt-файла отлично работает в обоих тестах. – user3685285

ответ

2

служба Windows запускается из separate session с другим рабочим столом так, ваша служба не сможет взять скриншот вашего рабочего стола (по крайней мере not without a lot of work).

Вам нужно либо запустить это как запланированную задачу, либо программу, запускаемую при запуске.