Тогда сервисный подход, вероятно, является вашим лучшим (единственным?) Решением.

у убить процесс программно в Vista / Windows 7 (я не уверен, что есть существенные проблемы в реализации UAC между ними, чтобы иметь значение).

Прямо сейчас мой код выглядит так:

  if(killProcess){
      System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcessesByName("MyProcessName");
       // Before starting the new process make sure no other MyProcessName is running.
        foreach (System.Diagnostics.Process p in process)
        {
            p.Kill();
        }

        myProcess = System.Diagnostics.Process.Start(psi);
   }

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

Код прекрасно работает в XP, но не работает в Windows 7 (и я полагаю, в Vista) с сообщением «доступ запрещен». Судя по тому, что всемогущий Google сказал мне, мне нужно запустить мою программу убийств как администратор, чтобы обойти эту проблему, но это всего лишь слабый соус. Другой потенциальный ответ - использовать LinkDemand, но я не понимаю страницу msdn для LinkDemand, поскольку она относится к процессам.

Я мог бы переместить код в поток, но у него есть целый ряд других трудностей, присущих ему, которые я действительно не хочу открывать.

Ответы на вопрос(2)

Ваш ответ на вопрос