Process.Start () консольного приложения, не работающего с Windows Service в Server 2008 R2

Обновление (3/20/2014 5:11 вечера EST): добавлен код для записи «GotHere0.txt». Gothere0, 1, 2, 3 все выглядит нормально. Gothere4 не появляется.

Обратите внимание: это не дубликат - у него очень тонкие различия со всеми существующими нитями, которые я нашел.

Требования:

  1. Запустите консольное приложение из службы Windows, которое выполняется под учетной записью Local System, в Windows Server 2008 R2
  2. Код внутри консольного приложения записывается в базу данных SQL и записывает файлы на диск, но не требует ввода пользователя (и нет необходимости видеть или взаимодействовать с самой Консолью). Все, что нам нужно - это код из консольного приложения для выполнения.
  3. Это должно работать при запуске сервера, не требуя от пользователя входа в систему.

Результаты:

Process.Start (sInfo) завершается так, как будто все было успешно. Никакие исключения не выбрасываются. Идентификатор процесса> 0. Тем не менее, очевидно, что никакой код внутри testapp.exe не выполняется. Кто-нибудь знает, как я могу это исправить? Благодаря!

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.ServiceProcess;
using System.Threading.Tasks;

namespace TestService
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            System.IO.File.WriteAllText(@"c:   empGotHere0.txt", "");
            System.Threading.Tasks.Task.Factory.StartNew(() => Run(), TaskCreationOptions.LongRunning);
        }
        protected override void OnStop()
        {
            ContinueRunning = false;
        }

        public static bool ContinueRunning = true;
        public void Run()
        {
            System.IO.File.WriteAllText(@"c:   empGotHere1.txt", "");
            while (ContinueRunning)
            {
                try
                {
                    List<string> args = new List<string>();
                    args.Add("Test");
                    StartApp(@"c:    emp     estapp.exe", args);
                }
                catch (Exception)
                { }

                if (ExitEarly()) return;
            }
        }

        private static void StartApp(string exePath, List<string> args)
        {
            try
            {
                System.IO.File.WriteAllText(@"c:       empGotHere2.txt", "");
                ProcessStartInfo sInfo = new ProcessStartInfo();
                sInfo.FileName = exePath;
                sInfo.WorkingDirectory = System.IO.Path.GetDirectoryName(exePath);
                sInfo.Arguments = string.Join(" ", args);
                sInfo.CreateNoWindow = false;
                Process runningProcess = Process.Start(sInfo);

                string message = "";
                if (runningProcess!=null)
                {
                    message = runningProcess.Id.ToString();
                }
                System.IO.File.WriteAllText(@"c:       empGotHere3.txt", message);
            }
            catch (Exception exc)
            {
                System.IO.File.WriteAllText(@"c:       empGotHere4.txt", exc.Message);
            }
        }
        private static bool ExitEarly()
        {
            // Sleep for a total of 60 seconds, and return if "OnStop" is called.
            for (int i = 0; i < 600; i++)
            {
                System.Threading.Thread.Sleep(100);
                if (!ContinueRunning) return true;
            }
            return false;
        }
    }
}

Вот код для testapp.exe:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace testapp
{
    class Program
    {
        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();
            if (args == null || args.Length == 0)
            {
                sb.AppendLine("NO arguments were passed.");
            }
            else
            {
                foreach (string arg in args)
                {
                    sb.AppendLine("Arg: [" + arg + "]");
                }
            }
            System.IO.File.WriteAllText("helloworld.txt", sb.ToString());
        }
    }
}

введите описание изображения здесь

c#,windows-services,console-application,windows-server-2008-r2,process.start,

3
Яндекс.Метрика