Вы должны войти, чтобы создавать сообщения и темы.

Несколько разных вопросов по программированию на C#

Страница 1 из 3► 3

Здравствуйте!
Я задумал освоить C#, конечно, для этого делаю свой проект. Перед этим просмотрел множество видеоуроков, и уроки уважаемого Автора мне очень понравились.
В связи с этим делаю попытку задать пару вопросов по этим урокам.
1. Урок по WMI, зачитке информации о hardware. Автор там сказал, что C# - высокоуровневый язык и не очень предназначен для работы с "железом". Но вот запросы к WMI выглядели просто и компактно, очень удобно, спасибо! И тут сразу вопрос - кроме получения информации - управлять можно? Например, подключаешь флешку, в системе появляется USB-запоминающее устройство. В диспетчере задач правой кнопкой кликнул "Отключить" - оно отключается, можно вытаскивать. И программы есть, которые это реализуют в своем функционале. Я тоже хотел бы в своем приложении это сделать, прошерстил множество ресурсов на русском/английском, но не нашел адекватной понятной информации.
2. Урок по созданию службы Windows. В видео урока Автор инсталлирует службу через утилиту Installutil. Можно и так, конечно. Но я в своем приложении хочу на новом компьютере сам, программно устанавливать (инталлировать в систему) службу, и нашел информацию, что это можно сделать через

СкопированоManagedInstallerClass InstallHelper из пространства имен Скопированоsystem.configuration.install. Но у меня не получается добавить в проект using этого пространства. Прошу Автора, если можно, научить и подсказать. Можно, конечно, через Process вызывать installutil, но мне хотелось бы понять в чем моя ошибка, почему я не могу использовать system.configuration.install.
3. Теоретический вопрос. На уроке про многопоточность Автор для работы с потоками использовал Threadы. Показал async/await, рассказал почему не всегда это удобно и работал с тредами. У меня вопрос - почему не с Task? Во многих книгах и уроках я читал, что треды - устарели, лучше использовать фабрику тасков, из пула брать таски и использовать. Почему Автор использовал треды, а не таски? Спасибо огромное, если поможете. С меня покупка Твикера!
4 вопрос. В том же уроке, про Invoke и treads Автор говорит, что самое "кошерное" обращение из потока к потоку GUI - это через "MethodInvoker". И показал, что он "void" и не принимает в себя параметров. А вопрос таков - а если нужно параметры? И вообще возвращать что-то нужно? Как употреблять этот самый кошерный "MethodInvoker"?

Добрый вечер 🖐
1. Да, можно и да, либо через WMI, либо через WinAPI.
C# – это не значит, что он не может использовать те же возможности и свойства, что использует С++. Нужно просто точно понимать, какой вопрос решается.
2. Скорее всего ошибка в том, что не добавлена директива using. А вообще, попытка принципиально делать всё на чистом C# – первый признак будущего закомплексованного и остающегося без повышения джуна/миддла. Если Я показал, что службу ставить нужно именно так, значит тому есть причины. Уровень знаний Windows у Меня больше, чем языка C#. Однако, уровень знаний языка C# достаточно высок, чтобы решать все вопросы на чистом C#. И если Я что-то делаю через cmd или утилиты Windows – значит тому есть причины. Одну из них написал выше. Если трачу более 10 минут на решение, которое должно работать из коробки и оно не работает, то перехожу к альтернативе. Лишь бы весь код не превратился в альтернативу. Но это уже совсем тяжёлый случай. Так что старание написать на C# – похвально, но данный вопрос Мне неинтересно решать, ибо Я его уже решил.
3. На данный момент Task полностью заменяет Therad. Это если коротко. Если всё же постараться найти применение, то оно у Меня есть в Win 10 Tweaker, когда экспортирую драйверы. На это есть причины, потому что выделять поток Я буду скорее всего для более тяжёлых задач. Редко, но метко. Могу даже применять асинхронный await в Thread, чтобы обойти ожидание одного метода, но дождаться другого. Всё это сахар и синтаксис и в идеале ограничиваться только Task. Но быть знакомым с Thread нужно, ибо поток и задача – это разные вещи и по-разному решают похожие задачи. 99 задач из 100 можно решить Task`ом.
4. Ответ в самом вопросе – нельзя в MethodInvoker посылать аргументы. Ещё раз, для теории отлично. Для реализации конкретной задачи могу ответить, что лучше.

В любой непонятной ситуации переходи на beta  © Win 10 Tweaker

Доброе утро! Во-первых, большое спасибо за ответ. Хотелось бы более подробно, если можно.
1. Можно здесь поподробнее? Как именно можно решить этот вопрос? Насчет понимания вопроса. Я делаю себе комплекс защиты своей личной информации на C#. Информация будет хранится на внешнем USB диске с несколькими степенями защиты. Разрабатываемое мной приложение, очень похожее на "умный лаунчер" из Вашего урока, по нажатию кнопки снимает защиту и приводит систему хранения информации к рабочему состоянию. После сеанса работы нажатие кнопки "Защита" устанавливает защиту обратно, и как финальная ступень, я хотел бы отключать этот диск из системы. Сейчас приходится дополнительно лезть в диспетчер устройств и, как я писал, ручками отключать диск. Если не затруднит, можно поподробнее, как это можно сделать на C#?
2. Понял, Вам этот вопрос не интересен и больше не буду Вас им беспокоить. Мне 50 лет, и, боюсь, судьба "будущего закомплексованного и остающегося без повышения джуна/миддла" меня не очень пугает ))). Меня этот вопрос интересует чисто как степень познания языка, а не способ именно так решить вопрос. Как я сказал, я видел несколько примеров инсталляторов  службы через ManagedInstallerClass InstallHelper , но там не акцентируется внимание на том, как именно это делается. Через NUGET не добавляется, дает сделать ссылку на dll с system.configuration.install, но тогда выдает ошибку во время загрузки формы, в которой сделана ссылка на эту dll. Для меня это просто загадка, и я сам тогда буду ее копать, если Вам не интересно ))).
Насчет 3 - спасибо, исчерпывающе, я и хотел такой информации. Насчет 4 - тоже спасибо, вопрос чисто умозрительный, для познания языка, как в нем все сделано. Раз не дает передавать параметры, значит, сделано для другого, а для задач с параметрами есть другие способы решения. Просто Вы сказали, что это САМЫЙ "фэншуйский" способ, вот я им и заинтересовался, кого ж слушать, как не знатоков?

Странно ,какой-то баг в системе. Я сейчас по адресу https://win10tweaker.ru/buy хотел купить твикер, как обещал, но при нажатии кнопки купить ничего не происходит, появляется окошко информации, что я также могу купить его из самого твикера через окошко "О программе". Хорошо, но почему здесь, в специально отведенном для этого месте не могу?

Цитата: Сергей от 01.09.2022, 20:34

СкопированоManagedInstallerClass InstallHelper из пространства имен Скопированоsystem.configuration.install. Но у меня не получается добавить в проект using этого пространства.

Обозреватель решений > ПКМ на Ссылки > Добавить ссылку > Ищем "System.Configuration.Install" > Ставим на него галочку > ОК, дальше прописываем дерективу Скопированоusing System.Configuration.Install; в нужном классе.

Уважаемый No_Hammer, к сожалению не получается приложить скриншот, но в Visual Studio 2022 даже нет пункта Ссылки в структуре проекта. Есть Зависимости, в этом пункте - Анализаторы, Пакеты, Платформы, Сборки. Получается добавить зависимость - появляется пункт в Сборках на dll, но это видимо не правильно, так как при выполнении приложения в момент загрузки той формы, к которой добавлена эта Зависимость, вылетает исключение что сборка должна загружаться через рефлексию. Видимо, эта dll-ка неправильно загружается в этом случае.

No_Hammer, в других проектах есть ссылки. Я сделал новое простое приложение WinForms и там пункта Ссылки нет. В какой момент этот пункт появляется в структуре проекта?

Уважаемый Хачатур. Почему-то я не могу купить Твикер. Даже при скачке бесплатной версии, после соглашения и подтверждения капчи выскакивает ошибка Ошибка соединения SSL. Я попробовал на Firefox и на Chrome - одна и та же картина. Я из Беларуси, может это играет роль?

No_hammer, еще уточнение. Во всех старых проектах, которые были созданы еще в Visual Studio 2019 есть пункт Ссылки. Я перешел на VS2022 и тут продолжил, и в новых проектах новой версии IDE уже создаются проекты без Ссылок. А старые проекты, загруженные в VS2022 отображаются с пунктом Ссылки. Может подскажете, в чем тут дело?

Уважаемый No_Hammer, к сожалению не получается приложить скриншот ...

Здравствуйте, Сергей.
Как оформлять свои темы и комментарии  |  Как делать крутые скриншоты

Лучший способ помочь себе — помогать другим.

Сергей, доброе утро ☀
Нажатие кнопки Купить в Win 10 Tweaker запускает Win 10 Tweaker и сразу предлагает купить. Получается так, что Вы ни разу даже не запускали Win 10 Tweaker. А сделано так с кнопки с сайта, потому что можно активироваться на лету, чтобы привязать активацию к железу.

Программно отключить диски можно, хоть внешний, хоть флешку. Можно даже простой командой на PowerShell.
А вот и пример реализации на C#: https://dev.to/iamthecarisma/enabling-and-disabling-usb-disk-drive-using-c-4dg5

В любой непонятной ситуации переходи на beta  © Win 10 Tweaker

Да, если можно, пример бы не помешал.  Да, я не запускал Твикер, потому что не могу его скачать. Даже бесплатную версию. Ошибка SSL ошибка соединения 1. Сейчас попробую скриншот сделать и добавить. У меня нет FastStone Capture, нет эккаунта на Imgur, поэтому вставлю скриншот прямо сюда.
К сожалению, скриншот с локального компьютера не могу добавить. Надо загружать на файлообменник какой-то, но стоит ли ради одного раза? Могу письмом прислать. Суть в том, что выдает маленькое окошко "Не удается скачать данный файл" Детали - SSL_connect_error 1. И это я просто хочу скачать бесплатную версию, чтобы в ней сделать оплату.

Добрый🖐.
Через vpn проверьте.

«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

Да, через ВПН сработало, скачал программу, запустил, перешел на ссылку ПРО, нажал КУПИТЬ, заполнил е-мейл. Из Беларуси я могу заплатить 2-мя карточками. Одна Виза, другая Мастеркард. на сервисе Kassa я попробовал сначала одну карту, потом другую. На обеих выдает:

Не сработало
Похоже, это был технический сбой — попробуйте ещё раз, пожалуйста. И так по 10 попыток каждой карточкой. Хачатур, могу я пойти в банк и просто перевести Вам деньги переводом? Или еще как-то? Потому что ни один из предложенных способов я из Беларуси не могу осуществить. Наличные в Терминалах города, кошелек ЮMoney, приложение СберБанка, Тинькофф и прочее. Нету в Беларуси.
Страница 1 из 3► 3