2015-10-29 4 views
-1

Я пытаюсь запустить exe-файл в качестве службы окна. Я делал это прежде, чем вручную, делая так:Как запустить exe в качестве службы окна с помощью C#

sc create TestService binPath= "C:\MyExePathWhichIsToBeRunAsWindowService" 

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

Код должен запросить у пользователя путь к файлу exe, и этот файл должен быть запущен как служба окна, а также имя, которое он должен предоставить этому окну. Эти две вещи пользователь вводит во время выполнения, который является легкой задачей для меня, но однажды, если я получил это, то как я буду запускать команду ниже из кода C#?

sc create TestServiceNameUsrEntered binPath= "path user entered for exe at run time" 

Может кто-нибудь, пожалуйста, помогите мне?

EDIT: Пожалуйста, обратите внимание, что пользователь всегда будет ввести сервисПрикладной исполняемый файл Не произвольные файлы

+1

Почему бы не запустить 'sc create' из вашего приложения с помощью' Process.Start'? –

+0

Я не думаю, что вы можете запустить произвольный файл exe в качестве службы. Это должно быть сервисное приложение. Или я не понимаю вопрос? –

+0

Пользователь @ThorstenDittmar всегда будет входить в приложение-службу .. не произвольный файл. Как это сделать сейчас? – struggling

ответ

1

Вы должны смотреть в Process.Start. Вы можете попробовать что-то вроде этого:

Process.Start("sc", String.Format("create \"{0}\" binPath=\"{1}\"", serviceName, binPath)); 
1

Вы посмотрите на Topshelf может.

Если вы хотите сделать это с нуля самостоятельно, вы можете посмотреть в HostInstaller.cs, где он просто добавляет нужный ключ реестра:

using (RegistryKey system = Registry.LocalMachine.OpenSubKey("System")) 
using (RegistryKey currentControlSet = system.OpenSubKey("CurrentControlSet")) 
using (RegistryKey services = currentControlSet.OpenSubKey("Services")) 
using (RegistryKey service = services.OpenSubKey(_settings.ServiceName, true)) 
{ 
    service.SetValue("Description", _settings.Description); 

    var imagePath = (string)service.GetValue("ImagePath"); 

    _log.DebugFormat("Service path: {0}", imagePath); 

    imagePath += _arguments; 

    _log.DebugFormat("Image path: {0}", imagePath); 

    service.SetValue("ImagePath", imagePath); 
} 
Смежные вопросы