Запустите программу Windows, пока не вошли в систему - PullRequest
1 голос
/ 01 марта 2012

Я недавно "заново познакомился" с Windows, и я также новичок в .NET & C #.Я пытаюсь найти способ постоянно запускать программу на компьютере с Windows 2003 (то есть он запускается, когда никто не вошел в систему, и автоматически запускается при загрузке сервера).Мне кажется, я слишком усложняю проблему и застреваю.

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

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 01 марта 2012

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

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

1 голос
/ 01 марта 2012

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

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

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

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

...