Ответы пользователя по тегу C#
  • Удалить файл из папки Program Files без прав администратора. Возможно ли?

    Nipheris
    @Nipheris Куратор тега C#
    а) создать для сервиса отдельного пользователя и дать ему необходимые права в ФС;
    б) поменять пользователя сервиса на другого, но для этого нужно знать, из под кого он запускается сейчас и почему не хватает прав.

    P.S. Да, что там насчет инсталлера?)
    Ответ написан
  • Как извлечь значения из переменной, с помощью регулярки С#?

    Nipheris
    @Nipheris Куратор тега C#
    ^(?<text>[^:]*):(?<text2>[^:]*):(?<text3>[^:]*)$

    Не знаю, по какому источнику вы смотрели, в MSDN все предельно понятно: https://msdn.microsoft.com/en-us/library/bs2twtah(...
    Ответ написан
    2 комментария
  • Пользовательский интерфейс и C# на html?

    Nipheris
    @Nipheris Куратор тега C#
    Значит возможен ли UI с помощью html, css и js?

    Возможен: Atom, VS Code и прочие приложения на Electron-е (не только они, разумеется, это как пример).
    Ходят слухи что WPF, помирает и толк его использования, сходит на нет.

    Не делайте поверхностных выводов. WPF это ж не какой-нидь дед старый, который когда помирает, мало чем уже семье помочь может. Если технология просто не так активно развивается, это не значит, что она по определению в хвосте какой-либо другой.
    Все, кто использует HTML для десктопного интерфейса это те, кто хочет а) кроссплатформенности; б) сделать свою софтину hackable, например чтобы можно было всякие плагины писать на js, и тем самым понравиться своим клиентам-разработчикам. Ну и еще в) те, кто кроме html+js стека ничего не знает, а декстопа тоже хочется ("мы же тоже люди").
    Ответ написан
    1 комментарий
  • Как работает C#?

    Nipheris
    @Nipheris Куратор тега C#
    А откуда берётся этот MSIL? Куда компилируются .cs?

    cs компилируются компилятором. Есть стандартный csc, поставляется вместе с .net framework (НЕ со студией). Это "классический" компилятор от MS, написан на C++, с закрытым исходным кодом. Такой же есть и для Visual Basic. Кроме них есть еще Roslyn-компиляторы C# и VB, они open-source, их главное отличие в том, что они сами написаны на управляемых языках. Это значит, что у вас есть compiler-as-a-service. Это, в свою очередь, значит, что если вы хотите написать тулзу, обрабатывающую тем или иным образом исходный код, например на C#, вам не нужно самому писать парсер/компилятор, вы можете подключить модули Roslyn-компилятора и пользоваться ТЕМ ЖЕ компилятором (лексером/парсером/etc), что и используется непосредственно при сборке приложения. С классическим компилятором так не получится, он представляет из себя черный ящик: cs на входе, сборка на выходе.

    Далее будем считать, что не учитываем в рассуждениях технологию .net native.
    в каком моменте тогда работает виртуальная машина

    она работает в момент запуска exe.
    почему мы получаем на выходе .exe

    в этом вопросе часто возникает путаница. Дело в том, что дотнетовские exe и dll - это т.н. сборки (assemblies), и они содержат метаданные и MSIL (!) исполняемый код. То, что у них расширения exe и dll - это потому, что MS для повышения совместимости и удобства использования, упаковала их в формат PE. Чтобы .net приложения можно было запускать также, как и нативные. НО реально в exe-файле есть только небольшой загрузчик, который запускает CLR, просит загрузить текущий файл как дотнет-сборку и передать управление на метод-точку входа. Почитайте про сборки в хорошей книге, и скачайте dotPeek, посмотрите что внутри дотнетовского exe. Это совсем не то, что в "обычном", нативном exe.

    В мире C# существуют также такие понятия как .NET, Mono, Roslyn и т.д., можете ли вы структурированно разъяснить их смысл?

    .NET это название и бренд платформы, .NET Framework, а теперь и .NET Core - реализации платформы от MS, Mono - open-source реализация НЕ от MS. .NET FW работает только на винде, .NET Core и Mono и на других платформах. Про Roslyn уже упомянул.
    Ответ написан
    Комментировать
  • Как отменить глобальный мышинный клик?

    Nipheris
    @Nipheris Куратор тега C#
    https://msdn.microsoft.com/en-us/library/windows/d...

    If the hook procedure processed the message, it may return a nonzero value to prevent the system from passing the message to the rest of the hook chain or the target window procedure.

    1 минута 25 секунд на поиск. Или вы какой-то другой хук ставите?
    Ответ написан
    2 комментария
  • ADO.NET море проблем?

    Nipheris
    @Nipheris Куратор тега C#
    1) использовать EF7 с edmx невозможно, т.к. последний считается устаревшим форматом/подходом к хранению структуры БД (см. blogs.msdn.com/b/adonet/archive/2014/10/21/ef7-wha... Если все-таки очень хочется edmx - попробуйте установить EF6;
    2)
    что надо установить SQl Server

    установить надо было скорее всего Entity Framework Tools, что, в общем-то, логично. Для установки EFTools нужно при установке выбрать SQL Server Data Tools (см. https://github.com/aspnet/Tooling/issues/53 ), что тоже логично. Вы точно устанавливали их при установки студии? Обращаю ваше внимание, что это Tools, а не сервер.
    Ответ написан
    2 комментария
  • Дерево выражений не может содержать динамическую операцию?

    Nipheris
    @Nipheris Куратор тега C#
    Компилятор жалуется на то, что где-то в ваших лямбдах он столкнулся с dynamic, и разумеется он не может его вкомпилить в expression tree. Скорее всего, p был dynamic, а t - нет. Укажите в вопросе конкретные типы контейнеров, по которым вы делали Find и Where, может ситуация понятнее станет (и заодно, какие интерфейсы они реализуют - IEnumerable<T> или IQueryable<T>).
    Ответ написан
  • Как избавиться от подобных предупреждений в тимсити?

    Nipheris
    @Nipheris Куратор тега C#
    Пользоваться NuGet для работы с зависимостями (https://www.nuget.org/packages/CompareNETObjects/ как раз то что вам нужно), а если уже пользуетесь - очевидно, нужно пофиксить список зависимостей в packages.config, или же сделать nuget restore перед вызовом MSBuild.
    Раз сборка не находится, то либо: а) путь к ней неверный; б) путь верный, но она не выкачивается nuget-ом при сборке;
    Еще может быть в) косяк с версиями/токенами, но это маловероятно.

    Ну и само собой, если у вас код компилится и работает без проблем, удалите вообще этот референс из проекта.
    Ответ написан
    Комментировать
  • Как правльно произвести вызов события из потока?

    Nipheris
    @Nipheris Куратор тега C#
    Когда Б обрабатывает событие, возникает исключение как будто метод класса Б работает в потоке объекта А, это нормально?

    Ну вы же инвокнули ивент в другом потоке, с чего бы ему автоматически искать другой, "нужный" поток? Вы сами должны знать, в каком потоке вам поднимать событие. Если оно внутреннее, то может и в рабочем потоке правильно его генерировать, а если событие видно извне (т.е. можно подписаться извне класса), а сам класс А абстрагирует существование и работу некоего другого потока (т.е. клиенты НЕ должны об этом знать) - то тогда логично самому заботиться о передаче ивента в нужный поток. Помните, что именно вы определяете поточную архитектуру приложения, и вам решать какой код в рамках каких потоков будет отрабатывать.

    Пофиксил через SynchronizationContext, но может быть есть получше варианты?

    Нормальный вариант, если вы используете подсистему, у которой есть реализация SynchronizationContext, например WinForms или WPF. Если же это не ваш вариант, то нужно предоставить свою реализацию, или же отказаться от его использования и явно использовать очереди сообщений для общения между потоками.
    Ответ написан
    Комментировать
  • Почему при попытке подписать сборку выходит ошибка?

    Nipheris
    @Nipheris Куратор тега C#
    При создании PKCS#12-контейнера (он же PFX) укажите настройку, что ключ разрешено использовать только для создания электронной подписи. Например. для openssl pkcs12 это параметр -keysig. Вы какой утилитой создавали ключ? sn?
    Ответ написан
    1 комментарий
  • Какая разница между interface в С# и чисто виртуальными функциями в класах С++?

    Nipheris
    @Nipheris Куратор тега C++
    Одно и то же, чисто абстрактные классы в C++ это способ получить функциональность, аналогичную понятию "интерфейс" в тех языках, где оно есть (C#, Java, etc.).
    Благодаря множественному наследованию в C++ среди базовых классов могут быть как классы с реальным поведением (т.е. с реализациями каких-либо методов), так и классы-"интерфейсы", т.е. классы только с pure-virtual функциями-членами.
    Ответ написан
    Комментировать
  • Как передать char указатель функции dll, чтобы можно было в дальнейшем разобрать на массив?

    Nipheris
    @Nipheris Куратор тега C++
    [DllImport("вашалиба.dll", CharSet = Ansi, CallingConvention = CallingConvention.Cdecl)]
    public void LaunchJavaApplet([In] string[] JVMOptions);
    Ответ написан
  • Как влияют указатели на быстроту работу метода считывания цвета с битмапки?

    Nipheris
    @Nipheris Куратор тега C#
    Так влияют, что вы пишете/читаете напрямую в ту память, которая будет потом использовать Bitmap-ом для отрисовки/сохранения и всего прочего. В частности, у вас нет вызовов GetPixel/SetPixel, которые ОЧЕНЬ МЕДЛЕННЫЕ для данной задачи. У вас цикл по двум измерениям картинки, т.е. вызовов GetPixel будет width * height штук. Поверьте, это много и тяжело. Адресная арифметика, а именно
    curpos = ((byte*)bd.Scan0) + h * bd.Stride;
    намного легче. Собственно, возможность ее применения обеспечивается блокировкой реальных данных битмапа методом LockBits. Под блокировкой здесь понимается пометка для кода CLR, в частности для GC, что этот участок памяти трогать нельзя (перемещать, например), пока вы эту пометку не снимете.
    Собственно говоря, более-менее быстрая работа с Bitmap возможна только через BitmapData, так как используя Get/SetPixel вы не дождетесь конца работы вашего алгоритма.
    Ответ написан
    Комментировать
  • Event - это value или reference type в C#?

    Nipheris
    @Nipheris Куратор тега C#
    1) Ивент - это тот же делегат, только с урезанным интерфейсом для внешних обращений (за пределами класса). В public интерфейс класса от ивента попадают только операции добавления и удаления хэндлера. Вы можете инвокнуть делегат, представляющий ивент, изнутри класса, но не сможете это сделать снаружи класса (т.е., например так: button1.Clicked(new EventArgs(...)) );
    2) Раз мы выяснили, что ивент это делегат (мультикаст, причем), то идем и убеждаемся в том, что делегат это reference-тип: https://msdn.microsoft.com/en-us/library/system.mu...

    Экзамен на носу? Успешной сдачи!
    Ответ написан
    Комментировать
  • Как перехватывать весь трафик и перенаправлять на прокси в C# или С++ (пишу в VS)?

    Nipheris
    @Nipheris Куратор тега C++
    Вадим Егоров
    > подключение к прокси при настройке через панель управления осуществляется по протоколу HTTP
    Конечно по HTTP, под "прокси" обычно и понимают как раз таки HTTP-прокси. Если вам нужно перенаправлять ЛЮБЫЕ TCP-соединения, т.е. в том числе те, которые не имеют вообще никакого отношения к HTTP (например, SMTP), то тогда обычно пользуются соксами (https://en.wikipedia.org/wiki/SOCKS), а если программа сама не умеет инкапсулировать трафик в этот протокол - то используют соксификатор, например такой www.freecap.ru .
    Нужен ли вам socks или нет - это зависит от того, что у вас там за прокси. Я еще раз отмечу, что не понимаю, что это за сервер такой, что он шифрует и по какому протоколу работает. Если это ваш собственный протокол, то тогда у вас два пути:
    1) вы пишете локальный socks-прокси, направляете программы через него (путем настройки программы или путем насильственной соксификации), а он уже шифрует трафик как вам надо и общается с УДАЛЕННЫМ прокси по ВАШЕМУ протоколу
    2) вы пишете аналог соксификатора, т.к. программу, которая будет форсировать передачу трафика через себя, и также будет шифровать его и направлять по ВАШЕМУ протоколу на удаленный прокси. Тогда вам скорее всего и придется разбираться с перехватом пакетов. Самым простым вариантом будет использование WinPcap - тогда не нужно будет работать в режиме ядра (это не самая простая вещь на свете), плюс в современных версиях этой же либой можно и отправлять пакеты: www.winpcap.org/docs/docs_412/html/group__wpcap__t... . FreeCap реализует иной подход - он перехватывает вызовы Winsock API у целевого процесса, заменяя их на свои функции. Вариант интересный, но ИМХО менее надежный.
    Ответ написан
  • Как сделать "имитацию чата" через NamedPipeClientStream и NamedPipeServerStream?

    Nipheris
    @Nipheris Куратор тега C#
    Что конкретно делаете/добавили? Какие исключения? В каком месте кода?

    На вопрос в текущей версии можно ответить только так:
    а) построить реализацию чата с помощью именованых каналов возможно;
    б) вы построили реализацию с ошибками (какими, пока непонятно);
    в) для реализации чата можно предложить много других способов, например использовать TCP/IP и сокеты Беркли, только непонятно какой вам нужен.
    Ответ написан
    Комментировать
  • Какие технологии выбрать для создания кроссплатформенного файлового менеджера?

    Nipheris
    @Nipheris Куратор тега C#
    За JavaFX говорить не буду, вроде штука развивается, возможно наконец будет нормальная джава для десктопа; сравнивать не могу, не пользовался
    Также я видел что-то про Qt Quick и QML

    пожалуй это и стоит рассматривать для новых проектов.
    Сам я им не пользовался, но говорят, что WPF гораздо мощнее, чем Qt

    Раньше, когда появился - да, был значительно мощнее (до появления QML). Вообще был наверное самой продвинутой технологией для десктопа. Но уже 2015-й год, Qt Quick 2 и все такое, так что Qt и WPF уже вполне сравнимы.
    Если не ошибаюсь, то это совсем не кроссплатформенное решение

    Да, к сожалению. Поэтому вам резонно вернуться к рассмотрению Qt.
    рассказать про WPF что-то еще, я буду благодарен.

    дотнетовская технология, появилась в .net 3.0, использует direct3d для отрисовки, windows-only. Если нужны еще подробности - пишите в комментарии.
    то я больше склоняюсь к Qt, так как скорость работы всё же важнее скорости разработки

    хороший выбор для кроссплатформенного файлового менеджера, только замечу, что вы выбираете вы достаточно смело - в 95% случаев люди ищут либу к знакомому языку/платформе, т.к. обычно именно язык новый язык изучить не могут/не хотят. Если вы уверены, что C++ вы тянете, то тогда без вариантов - Qt.
    Ответ написан
    6 комментариев
  • Как сразу полностью закрыть сокет у TcpClient, без таймаута и освободить порт в системе?

    Nipheris
    @Nipheris Куратор тега C#
    по тому порту, который использовался tcp клиентом

    возможно снова подключиться по этому порту, без таймаута.


    Я вообще не пойму что вы делаете. Вы указываете фиксированный номер клиентского порта? Как и зачем?
    Ответ написан