Сначала я отвечу на вопрос 2:
Чтобы запустить или остановить программы, вам просто нужно использовать объект System.Diagnostics.Process, а пример кода находится прямо в библиотеке MSDN.
Для вопроса 1:
Вы можете периодически опрашивать веб-сервис, если хотите.
В качестве альтернативы вы можете настроить службу для удаленного взаимодействия и заставить ее просто прослушивать tcp-порт для вызовов функций, а затем написать приложение Windows, которое может использовать удаленное взаимодействие для вызова службы. Я должен был сделать это для легального бизнес-приложения, и оно работает очень хорошо.
Однако я был бы очень безответственным, если бы не включил это предупреждение:
В любом случае, настройка компьютера таким образом, чтобы он мог выполнять произвольный код, является плохой идеей и должна выполняться очень осторожно. То, что это можно сделать, не означает, что должно быть . Если вы пойдете по пути веб-службы, как вы будете обеспечивать, чтобы кто-то не вмешивался в веб-службу и не получал вредоносный код для выполнения? Откуда вы знаете, что кто-то не будет связываться с вашим app.config и будет указывать приложению свой собственный веб-сервис? В сценарии удаленного взаимодействия, как убедиться, что какой-то другой разработчик .Net не просто создает собственный прокси-сервер?
Честно говоря, я поражен тем, что Microsoft даже позволяет использовать System.Diagnostocs.Process в приложении .Net. Вы можете буквально делать с ней все, что захотите, включая запуск оболочки cmd и выполнение системных команд. Поэтому я призываю вас серьезно подумать, действительно ли это необходимо сделать. Возможно, вам лучше будет установить vnc, либо использовать удаленный рабочий стол, либо другое приложение для удаленного доступа.
Еще один вопрос, на который вам нужно ответить: «должно ли приложение быть видимым для пользователя на этом удаленном компьютере?» Если это так, то вам нужно убедиться, что служба настроена для работы в контексте этого пользователя. в противном случае вы можете, например, запустить Word с использованием локальной системной учетной записи, и он никогда не будет виден человеку, вошедшему в систему на этом компьютере.