Таймер С# истек, не запущен пакетный процесс в службе Windows

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

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;
        }
    }
}

person user3685285    schedule 26.08.2015    source источник
comment
Что происходит, когда код достигает строки Process.Start при отладке?   -  person saarrrr    schedule 26.08.2015
comment
И каково поддающееся проверке поведение пакетного процесса?   -  person saarrrr    schedule 26.08.2015
comment
Итак, если я запускаю его как консольное приложение, оно действительно работает отлично. Однако, как только я помещаю его в службу Windows, он перестает работать. Странно то, что вывод файла txt работает отлично в обоих тестах.   -  person user3685285    schedule 26.08.2015
comment
Похоже на проблему с учетной записью или разрешением. Убедитесь, что учетная запись службы имеет доступ к пакетному файлу.   -  person saarrrr    schedule 26.08.2015
comment
Службы не имеют дескрипторов пользовательского интерфейса.   -  person zam664    schedule 26.08.2015
comment
Заголовок stackoverflow.com/questions/4516200/   -  person restrada    schedule 26.08.2015


Ответы (1)


Службы Windows запускаются из отдельного сеанса. с другим рабочим столом, поэтому ваша служба не сможет сделать снимок экрана вашего рабочего стола (как минимум не без труда).

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

person shf301    schedule 26.08.2015