2012-02-29 1 views
1

Я недавно стал «повторно знаком» с Windows, и я также новичок в .NET & C#. Я пытаюсь выяснить способ запуска программы на компьютере под управлением Windows 2003 в любое время (т. Е. Она запускается, когда никто не регистрируется и автоматически запускается при загрузке сервера). Я думаю, что я преувеличиваю проблему и заставляю себя застрять.Запуск программы Windows, хотя не был зарегистрирован

Эта программа, называемая Job.exe, обычно запускается в графическом интерфейсе, но у меня есть возможность запускать ее из командной строки с параметрами.

Из-за части «всегда включен» первое, что приходит в голову, это создать сервис. Смешно, я зациклился на том, как именно запустить исполняемый файл (Job.exe) из моего файла Service1.cs (я упоминал, что я новичок в C#?).

Еще несколько моментов, которые я придерживался относительно создания службы, - это то, как и где настраивать взаимодействие с рабочим столом, так как я хочу, чтобы Job.exe выполнялся полностью в фоновом режиме. Кроме того, поскольку OnStart должен вернуться в ОС по завершении, я немного смущен относительно того, где я должен поместить код для выполнения программы; поместить его в свой метод OnStart или создать метод, который я тогда вызываю из OnStart?

Последний вопрос при создании сервиса касательно параметров. Job.exe принимает два параметра в общей сложности, один статический и один динамический (т. Е. Можно определить через диалог свойств службы в консоли управления службами). Я хотел бы иметь возможность создавать несколько экземпляров службы, задавая другой динамический параметр для каждого из них. Кроме того, динамический параметр должен иметь возможность принимать строковый массив.

Я уверен, что есть варианты вне создания службы, поэтому я буду принимать любые предложения.

ответ

3

Поскольку вы упомянули о том, что вы можете быть слишком сложным, вы можете использовать планировщик заданий для запуска своего приложения.

Использование планировщика заданий позволит вам создать «обычное» настольное приложение, которое, возможно, будет более простым, чем создание собственной службы. Кроме того, планировщик заданий имеет множество опций, которые соответствуют требованиям, которые вы затронули.

+0

Если это подходит для вашего случая использования, это может быть отличным подходом.Возможно, вам потребуется изменить приложение, чтобы проверить свойство, которое я упоминаю в своем ответе, чтобы он знал, отображать ли пользовательский интерфейс. –

+0

Планировщик задач работал отлично ... спасибо! –

1

Простейшим подходом может быть создание службы, ссылка на сборку приложения и вызов метода Main() для запуска приложения. Само приложение может использовать Environment.UserInteractive, чтобы определить, работает ли он как служба или настольное приложение.

Одна вещь, о которой следует помнить, как вы уже упоминаете, заключается в том, что ожидается, что метод запуска службы (и других методов управления) немедленно вернется (в промежутке времени «Начальная служба ...») диалоговое окно), поэтому вам нужно будет прокрутить поток, чтобы запустить основной метод. Что-то вроде этого:

Thread t = new Thread(() => { MyApplication.Application.Main("firstParam", "secondParam"); }); 
t.Start(); 

В PARAMS может прийти из файла и службы могут быть сконфигурированы с именем файла в качестве параметра (см this article для одного из многих примеров о том, как сделать это), или услуга может быть сконфигурированным, как вы упомянули, для принятия параметров и передачи их вместе с основным методом приложения. Это и жизнеспособные подходы. В любом случае одновременно может запускаться только один экземпляр службы, поэтому вам нужно будет регистрировать службу несколько раз с разными именами для настройки разных параметров.

+0

Это будет очень полезно для некоторых других проектов, которые я имею в виду. Спасибо за ответ! –