Я думаю, что вы говорите, что здесь есть две проблемы. Первая проблема заключается в том, что служба не запускается после установки. Во-вторых, служба не может запустить процесс. Я прав?
Когда я установил службы через проект установки, я всегда запускаю службу из метода Commit класса установщика, так что я знаю, что все установлено правильно. Я не уверен на 100% в этом, но вы не сможете запустить службу, пока установка не будет завершена. Похоже, что ваши пользовательские действия настроены правильно, поэтому не должно быть никаких проблем при вызове метода Commit (у вас есть Commit, включенный в пользовательские действия, верно?) Вот пример метода Commit из одного моих проектов:
public override void Commit(IDictionary savedState)
{
base.Commit(savedState);
try
{
var serviceController = new ServiceController("<Insert Service Name>");
serviceController.Start();
}
catch
{
MessageBox.Show(
"There was an error starting the <Insert Service Name> Service. Please manually start it, or restart the computer.");
}
}
Показывая окно сообщения пользователю, если что-то пойдет не так с запуском службы, по крайней мере, пользователь будет уведомлен о том, что служба должна быть запущена вручную. При отладке проблемы установки вы можете включить исключение в окно сообщения для более подробной информации о том, что именно происходит.
Мне любопытно - какую учетную запись вы используете в ServiceProcessInstaller? Имеет ли этот пользователь права на компьютере для запуска процесса? Есть ли у Процесса какие-либо особые требования к UAC? Я подозреваю, что контроль доступа - это то, что мешает запуску вашего процесса.