Rozpoczęcie procesu bez kradzieży fokusa (C #)

Muszę być w stanie uruchomić procesy (zarówno konsolowe, jak i okienkowe) bez kradzieży fokusa. Jedynym sposobem w ramach .NET, który znalazłem, jest Microsoft.VisualBasic.Interaction.Shell z Microsoft.VisualBasic.AppWinStyle. [Minimized | Normal] NoFocus (który jest mapowany na SW_SHOWMINNOACTIVE / SW_SHOWMA przekazywany do ShellExecute).

W aktualnej wersji mojego kodu (który kradnie fokus) używam System.Diagnostics.Process i polegam na niektórych funkcjach, które mi dają, których nie używa metoda Interaction.Shell.

2 pytania (jedno poważne i jedno wyładowujące moją frustrację, że tak naprawdę nie oczekuję dobrej odpowiedzi)

1.) Czy mam rację, że nie mam innego wyboru, jak samodzielnie zawinąć CreateProcess lub ShellExecuteEx, czy też brakuje mi innego rozwiązania? Naprawdę miałem nadzieję tego uniknąć, ponieważ proces jest tak kompletnym i użytecznym opakowaniem poza tym niedopatrzeniem, a implementacja, wywołania P / Invoke do debugowania i różne rodzaje bólu byłyby tak liczne.

2.) Dlaczego jeden zespół Microsoftu utworzył taki (inaczej) kompletny wrapper, a następnie wykluczył połowę możliwych wartości z ProcessWindowStyle, podczas gdy inny zespół stworzył podobny wrapper, który był znacznie mniej kompletny, ale zapewniał wszystkie użyteczne style okien?

questionAnswers(2)

yourAnswerToTheQuestion