Доброй ночи, лично Я добавляю в конце аргументов cmd: "& exit", это позволяет избавиться от останков cmd в фоновых процессах, если процесс не смог закрыться самостоятельно
Для тех, у кого после всех манипуляций с кодировкой для вывода всё равно выходят иероглифы и хрен пойми что, нашёл команду для cmd, мне помогло, только русский текст всё равно отобразит символами, но так-как у меня это только имя сетевого подключения - не критично, главное что основная информация хотя бы есть: REG ADD HKCU\Console /v CodePage /t REG_DWORD /d 0xfde9
Спасибо большое. А можете показать как вводить значения в командной строке? Например если запустить команду "time", то мы не видим что отобразилось в командной строке. А хотелось бы увидеть и суметь ввести какие значения
Консоль, как приложение и консоль как взаимодействие - немного разные. Чтобы вводить что-то в консоль, нужно отправлять эти значения, как аргументы своему приложению. То есть в Вашем случае, что Вы спросили, будет работать отдельный exe через простую консоль. То есть консоль не будет являться самостоятельным приложением.
В случае с консольным приложением вы можете использовать аналогичный RedirectStandardInput. Или же можно использовать SendKeys, есть такая вещь в вин апи
Здравствуйте, искал как вытащить данные ipconfig с консоли в лейбл. наткнулся на ваше видео, написал точно так-же, но в сам лейбл ничего не выводится. есть мысли в чем может быть дело?
Как можно в С# (если возможно) получить параметры извне не в консольном приложении (static void Main(string[] args)), а в точку входа Windows Form (static void Main()). Спасибо
Есть операции, которые намного дешевле и проще на cmd, чем на C#. Поэтому есть возможность подключаться. Пример из Win 10 Tweaker: Как узнать, SSD у человека или HDD? На C# никак, на С++ никак, на VB никак. А вот на PowerShell можно.
@@XpucT да вот нашел за пару минут emoacht.wordpress.com/2012/11/06/csharp-ssd/ обертка для винапи не пару строчек, зато не надо вызывать пс но один хер я могу вызвать внешнюю утилиту и считать вывод ее из stdin и регулярками распарсить это все равно не дает понимания смысла этих лямбд, а только больше засирает мозги синтаксисом непонятным
@@kalobyte Я это нашёл также когда-то за пару минут. Но судя по тому, что после Моего коммента Ты дал эту ссылку, Ты не очень понимаешь, что это боль в десятой степени. У кодера не должно быть принципов пилить на чистом C#. Это крайне тупо. В случае с вопросом SSD - это тупо в десятой степени. То есть 10 причин. 10 степеней боли в разных местах при использовании такого решения. Есть вопросы копирования файлов или удаления в корзину средствами подключения Basic, также Basic лучше при работе с ярлыками. Чтобы узнать какой монитор или ТВ установлен, C# не поможет. Он не настолько развит, как другие, зато легко даёт подключаться к любому другому. Что касается чтения вывода из внешней утилиты, то эта утилита должна поддерживаться также C#. Если внешняя утилита сделана не консольным окном, а типа консольным, то не получится. Нужно гуглить примеры, скорее всего кто-то это уже делал. Точно такой же вопрос чтения с этой утилиты.
@@XpucT дело не в принципах есл вопрос можно решить без внешних утилит, то он должен решаться без внешних утилит, т.к. антивирусы не любят такое насчет определить тип диска, то я думал, что есть wmi запрос к бд и вообще есть ли в системе свойства у типов хранилищ или дисков если в апи виндовса такого нет, то там конечно будут костыли с доставкой этой инфы и насчет типа консольным я не понял если приложение консольное, то оно выводит данные в стандартный вывод или stderr в шарпе же должны быть функции для принятия потока со стандартного вывода или ввода
@@kalobyte ну, уже всё было понятно с первого ответа, но после слов об антивирусах только закрепилось. Очевидно мы не найдём общий язык. Надеюсь, что найдёте ответ на свой вопрос.
Тоже пытался сделать такую программу к консольному приложению, но она не имеет такого ключа, который я могу ей отправить только когда она уже запущена. После запуска я могу получать логи, которые собираю и отправлять команды. Как сделать возможность *ввода* команд? И консольное приложение может очистить консоль и изменить текст на экране. Для ввода программа должна быть уже запущена (т.е поле для ввода)
XpucT нет, есть консольное приложение (node.js windows сервер), от которого нужно получать логи в реальном времени (сделано, спасибо видео) и вводить команды Теперь есть красивое приложение на C#, но команды вводить нельзя
Спасибо огромное! Именно то, что я искал: мне надо было, чтобы командная строка у яндекс-облака запрашивала новый токен. Большую часть параметров я нарыл верно, но что-т с синтаксисом намудрил похоже. Ваш пример заработал :) А может, сейчас понимаю, дело было просто в "/c" поля аргументов. В общем, очень полезное видео!
Пересмотрел несколько раз это видео и ещё предыдущее про лямбда выражение и как-то не могу уловить смысл. Я понял, что эта лямбда упрощает код, но не могу въехать когда лучше её использовать почему в конкретном примере мы используем именно такую запись? В предыдущем уроке вроде было понятно. Вот на примере process.OutputDataReceived += (s, e) => { label.Text += e.Data + Environment.NewLine; }; какая бы была запись без использования лямбды?
@@XpucT спасибо большое! Стало понятнее) Я сначала даже "вышел с этим вопросом в Интернет" и меня там гугл закидал делегатами, полез в самой вижуал студии внутрь OutputDataReceived и в итоге опять упёрся в делегаты. Почувствовал себя тупым =) Просто не сразу въехал, что есть такое по своей сути OutputDataReceived и почему мы потом пишем лямбду. Вдруг в будущем попадётся нечто подобное, а я не смогу понять что с ним делать). Как оказалось это такое же событие как какой-нибудь маус клик и т.п.. Да, в видео ты говорил, что это событие, но это как-то не отложилось в памяти и в ответе на комментарий это было продемонстрировано наглядно)
Спасибо тебе большое, два часа ебался с классом "Powershell", пытался заставить его работать, не смог.. нашёл твоё видео (ещё года два назад смотрел, но тогда не понадобилось), за пару минут переписал свой код согласно инструкции))) и всё заработало Вот просто от души, жирный лайк
Привет, хотел бы узнать, как сделать возможным общение 2 твоих программ? Вроде есть что-то, как pipe. Но не понимаю, что да как. Извините, если может не ясно выразился
Привет, Хачатур! По ходу урока переписывал код, написан точь-в-точь как у тебя, но у меня программа открывает новое окно. Передал программе права админа, ситуацию не изменило
Показывает ошибку на это: process.BeginOutputReadLine(); process.OutputDataReceived += (s, e) => { label1.Text += e.Data + " "; }; Ошибка: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'label1' не из того потока, в котором он был создан." пишу все как на видео. может что то изменилось?
Здравствуйте. Подскажите, есть ли какое-то решение. как в уже открытую CMD, передавать команды, то есть CMD открыли отдельно и надо ее поймать, и провести с ней операции?
@@XpucT Спасибо. По мучался, но получилось, разобрался, на самом деле очень удобный, этот Autoit. Тут еще выяснил, что его можно подключать к C#, вообще много процессов можно упростить. Ее раз спасибо, за подсказку.
Спасибо за урок! Я чёт не очень понял как лучше и эффективнее завершать процессы программ, служб и тд Cmd($"taskkill /f /im distnoted.exe" ); Так Или так foreach (Process process in Process.GetProcessesByName("regedit")) // Для каждого процесса, у которого имя regedit { process.Kill(); // Завершить процесс }
Оба варианта рабочие, однако, когда нужно завершить процесс (по какой-то причине) в отдельном потоке, то, чтобы не создавать Task или Thread проще завершить процесс в cmd.
ув. Хачатур привет Можно ли менять кодировку сразу в строке Match match? пример: line = wc.DownloadString($""); Match match = Regex.Match(line, " chcp 65001 & \"temp\":(.*?),(.*?)\"name\":\"(.*?)\","); label1.Text = match.Groups[3].Value + " " + match.Groups[1].Value + " °C"; или нужно добавлять в переменную line ? типа так---> line = wc.DownloadString($" chcp 65001 & "); P.S. Скажи пожалуйста можно ли вывести время в реальном времени, что бы после нажатия на кнопку, в лейбл выводилось время и чтоб время обновлялось само, без нажатия на кнопку(т.е. шло в реальном времени)?
Добрый день еще раз. Не могли бы вы рассказать про консоль "как взаимодействие"? Например я по вашему материалу запускаю команду plink (из состава putty) с аргументами, однако, если я делаю запрос на сервер в первый раз, то система даже при использовании аргумента для plink "-batch" запрашивает разрешение сохранить или нет ssh ключ. С помощью вашего урока я все это читаю, а как послать на такой запрос ответ "yes" не знаю. Если не сложно просветите как это сделать?
А вот по поводу poweshell и команды из примера "/command get-appxpackage | ft name" у меня что в выводе, что в самом poweshell (логично) говорит о том, что не распознает команду : the term 'get-appxpackage' is not recognized as the name of a cmdlet, function, script file, or operable program. Если есть решение, был бы рад услышать, но пока что, что решения не нашёл.
Таким новинкам даю какое-то время на развитие. Пока рано говорить. Но, как показывает практика, это очередная попытка сделать что-то, на что потом Microsoft успешно забьёт. Не могу опять же точно говорить, что так будет, но так показывает практика
Привет 🖐 В свойствах формы, как минимум стоит указать шрифт, который не блюрит. Есть по похожей теме видео: ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-weEjciHBEyE.html
Очень полезно, но мне интересно, как продолжить работу с консолью? Допустим, я написал команду "del /p file.txt", получил вывод "Удалить [Y(да)/N(нет)]?" и мне нужно для удаления написать "y" в консоль. Можно ли как-то реализовать такое?
Немного непонятно на том моменте, когда вы рассказываете про свойства UseChellExecute и RedirectStandardOutput, вероятно просто я тупой, но раньше я об этих вещях не где не слышал, а их описание почему то звучит для меня слишком страшно
Доброго времени суток! Наткнулся на ваши ролики. Долго пытаюсь понять принцыпы Power Shell, но пока безуспешно. Посоветуйте как пробить эту стену. Заранее благодарен.
Спасибо тебе за уроки! У меня только запрашивает запуск программы от Админа. Может кто подсказать, как ее с с# запустить или как по умолчанию запускать в cmd всегда от админа?
многобукф. можно мативационноное видео? типо зачем с 0? ты проги делаешь этим живешь. а юзеру без практики смысл. что тебе мотевировало это изучать? вин тен твикер тыж не сразу придумал. твой путь?)
@@deftrue4444 ого. загнул))) но я к тому нужноли это? мне нравиться к примеру фотошопить. знаю. учусь 7 лем лет. и всеравно тяп ляп. могу программить теоритически. но не кончиться ли так же? взял ноу экран к сожелению отсикает возможность шопить. поменять нет возможности. у праграммиромирования нет зависимости от железа. тут дело скорей в том что могу а не хочу. вопрос в том не накроеться все это без практики? что огн делал как развился в этом направлении? делать для себя тобишь в муср что ли?
Здравствуйте, попробовал ваш код, но при нажатии на кнопку вылезает ошибка "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'label1' не из того потока, в котором он был создан.". А также заметил, что если в выражении (s, a) я заменяю "a" на "e" то эта переменная подчеркивается красным. В точности повторил ваш код.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Diagnostics; namespace WindowsFormsApp2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Button1_Click(object sender, EventArgs e) { Process process = Process.Start(new ProcessStartInfo { FileName = "cmd", Arguments = "/c dism /online /cleanup-image /startcomponentcleanup", UseShellExecute = false, CreateNoWindow = true, RedirectStandardOutput = true }); process.BeginOutputReadLine(); process.OutputDataReceived += (s, a) => { label1.Text += a.Data; }; } } }
@@ВладимирДанилин-м3к это лайфхак, но злоупотреблять не рекомендуется, потому что если будут ошибки, то Ты их просто не выловишь. Просто всегда помни, что у Тебя подключён лайфхак.
Та же история. Костыли сейчас приделаю, но почему такое происходит, не догоняю. Насчет переменной события: как вообще у Хачатура работает с переменной e, если выше этот же символ объявлен переменной события кнопки?
Давай назад, Данил и не забегай вперёд. Про методы уже был урок. Идти в этом курсе нужно *строго последовательно* ➜ ru-vid.com/group/PL05SB3rBbUsraqiEUeS70RKhVAu97nGeb
@@XpucT О, спасибо за ответ. Да не, я уже и Шилдта прочитал на metanit сижу и все твои видео смотрел. Решил это видео пересмотреть и в голове, наверное, все перемешалось, из-за недостатка практики, я увидел здесь не то, что есть на самом деле. а Сейчас обдумал и понял.
Зравствуйте, не знаю как исправить ошибку System.InvalidOperationException: "Поток StandardOut не был перенаправлен или процесс еще не был запущен." работает только так private void button1_Click(object sender, EventArgs e) { Process process = new Process(); process.StartInfo.FileName = "cmd"; process.StartInfo.Arguments = "/c chcp 65001 & dism /online /cleanup-image /startcomponentcleanup"; process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = true; process.StartInfo.RedirectStandardOutput = true; process.Start(); process.BeginOutputReadLine(); process.OutputDataReceived += (s, a) => { label1.Text += a.Data + " "; }; process.WaitForExit(); }
Добрый день. Вы изучите материал, который Вам тут предоставлен, потом задайте вопрос. А Вы свой код откуда-то взяли, причём устаревший метод объявлений. По потокам также есть видео ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-vHqHrf914TA.html
Здравствуйте! У меня не срабатывает амперсанд. Сначала думал, что в коде, а в итоге сама консоль пишет "Неправильный формат параметра: $". В чем может быть проблема?
Добрый день. Смотря в какой среде разработки Вы работаете. Если в старой, где C# версия ниже 4, то он не знает, что это. Проблем в Visual Studio последней версии не может быть со знаком амперсанда.
привет Хачатур, почему-то вылезает ошибка при запуске кода не понимаю почему , на компе я админ и в VS тоже. private void button1_Click(object sender, EventArgs e) { Process process = Process.Start(new ProcessStartInfo { FileName = "cmd", Arguments = "/c time /t", UseShellExecute = false, CreateNoWindow = true, RedirectStandardInput = true, }) ; label1.Text = process.StandardOutput.ReadToEnd(); } Сама Ошибка - StandardOut has not been redirected or the process hasn't started yet.
Upd: Видимо в ответах к комментариям не приходят уведомления, либо они не появляются в списке. Вставлю ответ сюда: XpucT нет, есть консольное приложение (node.js windows сервер), от которого нужно получать логи в реальном времени (сделано, спасибо видео) и вводить команды Теперь есть красивое приложение на C#, но команды вводить нельзя
Большое спасибо за уроки!!! Можешь подсказать: 1. Как проверить доступ к файлу, например, для того, чтобы удалить или переименовать. 2. Как запустить child процесс с ограничением использования ресурсов CPU, оперативка
XpucT Спасибо большое за ответ!! 1. Данная реализация проверяет занят ли данный файл другим процессом, а что насчет атрибутов, например, файл только для чтения, а я его хочу удалить. 2. В данном видео рассказывается о потоках, а я имел ввиду запуск командной строки с параметрами и для этой командной строки огранить использование ресурсов CPU и Memory .
@@alex31347 1. File.SetAttributes(ПутьКфайлу, File.GetAttributes(ПутьКфайлу) & ~FileAttributes.ReadOnly); 2. Нужно искать в сети, есть ли вообще контроль управления памятью у cmd. Но что-то подсказывает, что контролировать нужно не cmd, а то, что она использует.
Хачатур не подскажешь, как в приложении winforms по нажатию на кнопку открывать в браузере по умолчанию определенную ссылку? Пробовал по твоему видосу как удалять папку через консоль , там консоль не видно, в общем очень удобно, но команда которую я ввожу не выполняется. Как можно сделать это по другому? В интернете решения не нашел. Заранее спасибо!!
@@XpucT да, окей Я просто пока решил помучиться и попробовать поставить на VirtualBox официальный образ для разрабов (тот что с вижуалкой сразу и тд) и накатить твикер с активатором, хех Спасибо
Добрый вечер. Я до данного плейлиста посмотрел еще 1 плейлист у другого человека. За 20 уроков вы объяснили все что он говорил за 60. Но после синтаксиса, я как будто начал смотреть видео по другим языкам. До этого не объяснялось что такое реестр или язык cmd. А без этих знаний, мне кажется что просмотр становится отчасти бесполезным. Как будто вы стало все обьснять для более продвинутой аудитории. Где мне все это понять, чтобы просмотр стал более эффективным?
В идеале пройтись по этому плейлисту: ru-vid.com/group/PL0U1uvNv2tf6DduPOCc9-IGJjdVghlvo_ Но только смотреть, не делать. Делать можно после просмотра всего листа, ибо многое уже поменялось.
@@XpucT Спасибо за такой скорый ответ. Обязательно пройдусь. Конечно здесь мне понравилось лямбда выражение, которое действительно связанно с синтаксисом и наверное упрощением читабельности кода и не только. А Нужно идти по новому плейлисту сейчас или уже после просмотра данного плейлиста?