Як отримати дані зі стандартних команд у своєму додатку на C#, не викликаючи підпрограми

Хочу написати невелику програму візуалізації даних, одержуваних за допомогою команд cmd.exe (ping, tracert, netsh, etc.) на C# windows form.

Справа в тому, що всі команди є програмами (ping.exe, etc) у system32. І можна їх викликати та спілкуватися за допомогою класу Process. Але ціль полягає в тому, щоб не вдаватися до запуску програм cmd, але використовувати їх функції (трасування пакетів і т.д.).

Я пробував рефлексією скористатися, але програми не мають протоколів складання. Чи є якісь рішення?

Якщо ні, те що потрібно для реалізації цих функцій?

У вас плутанина у думках. По-перше, "підпрограма" - це C# синонім методу. Якщо ви використовуєте winforms - ви вже використовуєте купу підпрограм :) А те, чого ви хочете уникнути, називається "зовнішня програма" або "дочірній процес".

По-друге, рефлексія можлива лише щодо програм на платформі .NET – а перелічені вами програми є нативними. Зрозуміло, рефлексія щодо них неможлива. З тієї ж причини марно з декомпілювати - все одно вам треба буде писати те саме іншою мовою.

По-третє, ping, tracert та netshнеє командами cmd.exe. Команди cmd.exe – це echo, if, call, set, goto, for і т.д., а те, що ви перерахували – це системні утиліти.

Тепер із питання.

ping. Є цей клас: msdn.microsoft.com/en-us/library/system.net.networ. Жодного разу з ним не працював, але виглядає зручним.

tracert. Використовуйте той же клас, вказавши Ttl у PingOptions.

netsh. Тут усе складніше. Справа в тому, що ця програма - обгортка для купи різних налаштувань, що знаходяться в абсолютнорізних місцях. Якщо вам потрібно отримувати дані - спробуйте пошукати їх у msdn.microsoft.com/en-us/library/system.net.networ. Якщо їх там немає – гуглить. Головне – гуглить без ключового слова netsh.

etc. А ось тут все не просто складно, а неможливо. Неможливо взяти невідому заздалегідь утиліту, і зробити те саме, що вона робить, не запускаючи її при цьому. Тому вам треба визначитися - або ваша програма вміє виконувати фіксований список дій - або їй можна передати будь-яку команду, але вона запускатиме дочірні процеси. Можливий і проміжний варіант – є дії, які програма може виконувати сама, а для виконання інших запускатимуться дочірні процеси.