У меня была похожая проблема, и возможность доступа к рабочему столу из службы не была проблемой. Он работал нормально, когда не выдавал себя за другого пользователя, но при попытке запустить процесс от имени другого пользователя это не удавалось.
Первое, что нужно сделать, когда он не запустится, - это узнать всю возможную информацию о проблеме. Первый вопрос заключается в том, вернул ли Process.Start значение true или false. Во-вторых, получили ли вы какие-либо исключения при попытке запустить процесс.
Прежде чем вы сможете полностью исследовать, важно знать, был ли Process.Start запущен с использованием UseShellExecute или нет - это должно быть ложно для олицетворения, но в противном случае вы можете выбрать, использовать ли его, и он будет вызывать различные функции Win32 в зависимости от этого параметра .
Если вы выполняете процесс, который должен запускаться от имени другого пользователя, не пытайтесь использовать олицетворение .NET - имя пользователя, пароль, домен StartInfo - это то, что вам нужно установить. Однако в IIS у вас есть некоторая дополнительная блокировка, и единственное решение, которое я нашел в Windows Server 2008, фактически включало в себя некоторые вызовы Win32 и реализации абстрактных библиотек безопасности. Многие из сценариев, с которыми вы можете столкнуться, описаны здесь: http://asprosys.blogspot.co.uk/2009/03/perils-and-pitfalls-of-launching.html
В примере кода на этой странице показано, как вызвать библиотеку и добавить пользователю доступ к Windows Station и Desktop, прежде чем запускать процесс от имени этого пользователя. Это было то, что мне нужно, чтобы Process.Start работал из IIS, исключив UAC, DEP и любые другие трехбуквенные аббревиатуры, которые я мог придумать;)