Команда VB.Net сделала гораздо больше, чтобы упростить для разработчика вопросы, касающиеся инструментария Windows, и я не вижу проблем с добавлением ссылки на VB dll и использованием ее в вашей программе на C #.
Это две команды с разной направленностью, вот и все. И вы не должны расстраиваться из-за использования Microsoft.VisualBasic.Interaction.Shell, если это решит вашу проблему.
Вы также можете использовать Reflector, чтобы увидеть фактическую реализацию и реализовать код самостоятельно, если не хотите ссылаться на dll.
[Правка - после кода добавлен пример кода, показывающий, что вы можете комбинировать Interaction.Shell и Process]
int pid = Interaction.Shell("notepad.exe", AppWinStyle.NormalFocus);
Process p = Process.GetProcessById(pid);
p.Exited += ((o, e) => Console.WriteLine("Exit"));
p.EnableRaisingEvents = true;
Console.ReadLine();
Здесь я использую метод Shell, чтобы запустить процесс, получить дескриптор процесса из pid и подключить события. Вы даже можете сделать p.Kill (), чтобы прервать процесс.
[Правка - обходной путь для cmd.exe]
Это начинает становиться немного хакерским на мой вкус, но это работает. Замените «NEWWINDOW» на случайную направляющую или что-то в этом роде, чтобы сделать ее уникальной.
Microsoft.VisualBasic.Interaction.Shell(@"cmd.exe /c ""start cmd.exe /k title NEWWINDOW""", AppWinStyle.NormalFocus);
foreach (var process in Process.GetProcessesByName("cmd"))
{
if (process.MainWindowTitle.EndsWith("NEWWINDOW"))
{
process.Exited += ((o, e) => Console.WriteLine("Exit"));
process.EnableRaisingEvents = true;
}
}