Задать вопрос
  • WMI почему отказывает в доступе?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Руководство от MS - здесь там есть ссылки и на руководство по настройке удаленного доступа к WMI, и на руководство по устранению неисправностей.
    Ответ написан
  • Как использовать логин пароль в NSSM при создании службы?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Дошёл до более менее адекватной ошибки, это указав ObjectName \\Domain\User 555555, получаю


    Попробуйте Domain\User, имя пользователя часто указывается так. Domain тут - имя домена AD, в котором существует пользователь - при условии что компьютер включен в этот домен или в домен, который доверяет этому. Если компьютер не в домене или пользователь - локальный, то вместо имени домена указывается имя компьютера.
    Ответ написан
    1 комментарий
  • Какие нужны условия, чтобы выставить тип загрузки службы - BOOT?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Вы, случайно, не пытаетесь установить этот тип запуска для обычной службы - программы пользовательского режима которую запускает Service Control Manager? Если так, то так делать нельзя: типы загрузки boot и system предназначены исключительно для драйверов режима ядра.
    Ответ написан
  • Что съело место на DPM сервере?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Пространство может быть занято теневыми копями содержимого диска.
    Посмотреть - vssadmin list shadowstorage из командной строки в режиме администратора. Удалить теневые копии можо тем же vssadmin, начинать надо с самой старой.
    Но не торопитесь ничего удалять: фактически это место может быть занято старыми версиями резервных копий. Не знаю, как там в DPM (не работал), но вот Windows Server backup совершенно точно использует старые версии файла с бэкапом (у него это - VHD) как способ хранения предыдущих бэкапов.
    Ответ написан
  • Как дождаться выполнения асинхронного метода?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    SomethingFuncCatch().Wait();
    В Wait дополнительно можно передать таймаут и/или CancellationToken (см. описание метода Task.Wait ).

    Только вот, боюсь, что вы не дождетесь когда закончится цикл
    while (i > 0)
    {
        Console.WriteLine("NewProcess started");
        i = i--;
    }

    Ибо вы в нем пытаетесь присвоить i то значение, которое было до уменьшения на 1.
    Ответ написан
  • Нормально ли использовать var вместо явной типизации в C#?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Вынесено из комментариев.
    Василий Банников , ну, что вам на это сказать?
    Сильно легче код писать таким образом.
    Писать - да, читать - it depends, как говорят англичане.

    Если тебе сложно понять смысл кода без типов - значит кто-то плохие имена дал переменным.
    А разве в legacy 4-5-летней выдержки, над которым поработало много программистов, хороших и разных, по-другому бывает? А ещё имена могут дать хорошие, понятные - но основанные на системе понятий, которая нетривиальна и не попала при этом в документацию. Чтобы понять, о чем я - попробуйте почитать исходники подсистемы маршрутизации в ASP.NET Core. лучше всего - после работы с чем-нибудь типа MVC или Razor Pages: сомневаюсь, что вы сразу въедете, что Model там и Model тут - это разные Model.

    А ещё бывает, что методы называются почти одинаково, но типы значений у них разные. Пример: builder.Services.AddOptions() и builder.Services.AddOptions<TOptions>() из кода конфигурирования контейнера сервисов, методы расширения IServiceCollection для Option Patterns - типы возвращаемых значений у них разные. А их ещё любят цеплять друг к другу к таким же методам через точку - вот и смотри потом, чой-то в ConfigureOptions какие-то лишние параметры вылезли.

    с анонимными типами без var работать было бы очень сложно.
    Правильный вопрос - зачем вообще заставлять работать с анонимными типами? Подозреваю, что их из-за маршрутизации в MVC завезли - как типы параметров, вместо того, чтобы передавать в методы генерации ссылок вместо IDictionary<String,Object>, как это оно там реально требуется. Но, в Microsoft решили, видимо, тогда не делать инициализаторы для словарей (при том, что потом всё равно сделали, не отвертелись), а притащить вместо них анонимные типы (интересно откуда - неужели прямо из JS?). Но это не точно. (Ага, в комментарии мне напомнили про LINQ)

    Тренд говорит об обратном - автоматический вывод типов сейчас есть практически во всех статически-типизированных языках в том или ином виде.
    Это потому что сейчас главное - быстрее писать MVP, для веба - особенно. Ну, а потом можно сказать волшебное слово: "Legacy".

    Ну и помни ещё, что ты же не в блокноте код пишешь
    Но читаешь-то ты его не только в IDE. В частности, MS в своей документации на сайте в примерах очень любит писать var - вот и выбирай потом, что делать: лезть прямо сразу в документацию по API (а ссылки отнюдь не прилагаются) или рисковать упустить что-то важное? А если ещё учесть, что сейчас принято документацию ограничивать примерами (MS любит, да) - оно вообще весело.

    Но, с другой стороны, автор вопроса, похоже, с трех- и более этажными дженериками ещё не сталкивался (ну, или забыл, как они выглядят) - там без var тоже грустно.
    Как-то так
    Ответ написан
    2 комментария
  • Для чего нужна отмена задач, кроме таймаутов и каналов?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Отмены задач используются, как ни странно, для отмены задач. А чтобы отменить задачу, это должно быть кому-нидуь нужно. Например, этим "кем-нибудь" часто бывает пользователь, которому результат задачи перестал быть нужным.

    В качестве примера: пользователь послал на сервер через веб-страницу запрос и ждет результата. Представим, что запрос - сложный, результат так сразу не получить, запрос выполняется, а пользователь ждет, потому что всё это понимает. Потом пользователю внезапно надоедает ждать и он посылает команду Отменить. Или - закрывает страницу. Так вот, по-хорошему, в этом случае надо отменить задачу, которая выполняет запрос, чтобы она не тратила впустую ресурсы сервера.

    А ещё отмена полезна для прерывания процессов потенциально бесконечных, типа смотреть, как горит огонь, как течет вода, как люди работают... :-)

    Таймауты тут не помогут в обоих случаях. В первом случае пользователь сам часто не знает, сколько он согласен ждать, а во втором - вообще нет никакого таймаута, ибо процесс бесконечен.
    Ответ написан
    Комментировать
  • Миграция вылетает по Stack Overflow. Есть ли ограничение на объем данных в миграции?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Причина ошибки, как пишется в сообщении о ней - переполнение стека. Размер стека для потогков определяется процессом, в котором работает приложение. Обычно он фиксирован и записан в заголовке .exe. Если при размещении веб-приложения в своем процессе (так делается запуск из Visual Studio) стека хватает, то настройте размещение приложения вне процесса и в IIS: документация - здесь, по умолчанию AFAIK для IIS используется размещение приложения ASP.NET Core внутри его рабочего процесса, и используется размер стека этого рабочего процесса.

    PS А вообще, я бы на вашем месте пересмотрел код миграций и использовал стек (локальные переменные методов имеющие тип значений, память, отводимая через stackalloc и т.п.) в нем по минимуму. Потому как требования к памяти приложения имеют свойство расти со временем, а стек задается фиксированной величиной.
    Ответ написан
    Комментировать
  • Имя "c" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Как исправить?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Запускать "операторы" из командной строки (cmd.exe в Windows или sh и пр. в *nix). Потому что синтаксис этих команд - не Powershell'овский. Ну, или переделать эти команды под Powershell.
    Ответ написан
    Комментировать
  • Почему на многих крупных сайтах не используются смысловые теги main,section, article, aside, header, footer?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Потому что современные веб-сайты основаны не на той концепции, которую продвигают теоретики-разработчики HTML.
    Вся эта смысловая разметка - она относится к коцепции документа как основного содержимого страниц. То есть - структурированного как текст содержимого, основное взаимодействие с которым - чтение и прочий просмотр. А в реальности большинсво крупных сайтов - это интерактивные приложения, у которых совершенно другая структура, в рамки "смысловой разметки" плохо впихуемая.

    Короче, смысловая разметка подобна Скрипачу: "А Скрипач не нужен, дорогой.".
    Ответ написан
    Комментировать
  • Почему получаю System.InvalidOperationException: No authentication handler is registered for the scheme?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Вы неправильно используете метод ControllerBase.Forbid. Передаваемая в него строка (она, как понимаю, преобразуется в массив строк из одного элемента) - это не сообщение об ошибке, а название использованного метода аутентификации.
    Ответ написан
    Комментировать
  • Как добавить одно поле множеству классов без применения наследования и добавления поля в каждый класс по отдельности?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Привыкли к миксинам в языке с динамической типизацией? В C# их нет, и вряд ли будут, потому что типизация тут статическая. И приемы программирования - соответственно, другие.

    В частности, чтобы добавить дополнительное свойство (или метод) в классы из разных иерархий наследования, используйте интерфейс. Примерно так (примеры - на основе кода из комментариев):
    public interface IChosable {
        bool IsChosen {get; set;}  //Желательно имена писать таки на английском правильном
                                                 // а не ломаном. А то глаза режет.
                                                 //Ну, или хотя бы - по русски транслитом: 
                                                 // Vybrano вместо IsChoised - и то лучше, IMHO
    }
    
    //...
        public class ViewedDirectoryData : DirectoryDataEntity, IChosable
        {
            public bool IsChosen {get; set;}  
        }
    
        public class ViewedOutputData : OutputData, IChosable
        {
            public bool IsChosen {get; set;}  
        }

    Но свойства, таки да, придется определять в каждом классе, реализующем интерфейс (но можно перенести их, вместе с указанием реализации интерфейса, в базовые классы иерархий).

    Удобство тут в том, что ссылку на любой из классов, реализующих интерфейс, можно привести к типу интерфейса - тогда и статический контроль типов сохраните, и работать со всем этими классами можно будет единообразно.
    Ответ написан
  • Linux. Через роутер в виртуалку на хосте ICMP идет, а TCP нет. Почему?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Возможно, прямые и обратные пакеты между 192.168.0.0/24 и 192.168.2.0/24 у вас ходят разными маршрутами. В наше время это проверить сложно, потому что современные устройства любят резать опцию записи маршрута в эхо-пакеты ICMP (в ping она включалось ключем -r 9).
    TCP, в отличие от ping, нужно установленное соединение, а роутер (брандмауэр на нем) может контролировать, что соединение установливается правильно. И если он видит пакеты только в одну сторону, то может блокировать соединение.

    Для проверки добавьте маршрут в 192.168.2.0/24 через Linux(192.168.0.101) на тот узел в 192.168.0.0/24, с которого вы пробуете wget. На Windows это делается командой route add 192.168.2.0 mask 255.255.255.0 192.168.0.101 (работает до перезагрузки).

    Если это решит проблему, то добавьте этот маршрут на постоянку - это можно сделать через DHCP или прописать маршрут вручную напостоянку (в Windows для этого используйте route add -p и далее по тектсту). Можете также попробовать отключить брандмауэр на роутере для внутренней сети (как это сделать и можно ли - это мне неведомо, я модель вашего роутера и что он может не знаю, я такое поведение на MS ISA Server в древности наблюдал).

    PS Вообще-то, если подключать виртуалку через именно мост ("на уровне L2"), то она должна иметь/получить адрес из той же подсети, что и хост, но тут я выяснять, что вы там на самом деле сделали, не хочу.
    Ответ написан
  • Как создать экземпляр экземпляра класса?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Вы неправильно понимаете класс enum. enum - это не класс, а ключевое слово языка C#.

    PS
    И я задумался:
    Надо не думать, и даже - не знать. Надо - уметь применять. Подумайте, какую практическую задачу вы хотели решить этой задумкой? Если такой задачи нет - не забивайте себе голову. А если желаете забить себе голову чисто для себя чем-нибудь абстрактным, то для этого лучше всего подойдет философия, а не IT.
    Ответ написан
    Комментировать
  • Как сделать Mock на приватное поле типа Dictionary для Integration tests или как можно проверить, что его метод был вызван?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Сделайте фабрику для экземпляра, реализующего кэш, и передавайте через конструктор её, в виде интерфейса. Тогда кэш у вас будет частным, действующим только внутри класса, но конкретная его реализация будет задаватьс снаружи. И все будет по фэн-шуюSOLID
    Для теста передайте в конструктор имитатор ("мок") этой фабрики, который создает и возвращаетнужный вам имитатор кэша.

    PS Стндартная для .NET имплементация кэша в памяти - это MemoryCache, он реализует интерфейс IMemoryCache. Только вот самому его имитировать нетривиально, поскольку у него есть особенность в поведении: его элемент (ICacheEntry) сохраняется в кэше по факту очистки (вызову Dispose() ). Я про это даже статью на Хабре написал.
    Ответ написан
    2 комментария
  • Как предотвратить изменение пользователем данных во время выполнения async метода сохранения этих данных?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Простейший вариант: копируйте (синхронно) в обработчике нажатия кнопки данные, которые вы сохраняете, в другое место, а там пользователь пусть хоть обизменяется: на сохраняемые данные это уже не повлияет. Если данных вдруг много, то тогда уже придется синхронизировать доступ к ним (для асинхронной синхронизации подходит SemaphoreSlim.WaitAsync/Release, а если вы можете позволить себе блокировку потока UI, то и lock сойдет). Есть и более сложные схемы - копировать только те данные, которые пользователь собрался изменить, и сохранять в таком случае именно их, а не данные из ViewModel ("копирование при записи"). Короче, дерзайте: вариантов много.
    Ну, а вариант с ползунком сам по себе ненадежен: пользователю доверять нельзя. Но как подспорье, вместе с блокировкой изменения - годится.
    Ответ написан
    Комментировать
  • Как заставить объект Moq возвращать разные значения при повторных прогонах теста?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Есть подозрение, что при каждом вызове тестового метода с новым параметром экземпляр вашего тестового класса каждый раз создается заново, вместе с новым экземпляром имитатора (Mock> _ratingRecordRepositoryMock; ) . В пользу этого говорит и то, что вы при каждом вызове заново настраиваете имитатор заново, а если бы экземпляр имитатора уже использовался, вы бы получили ошибку.

    Проверить просто: поставьте точку остановки (или воткните отладочное сообщение) в конструктор тестового класса.
    Ответ написан
    2 комментария
  • Как решить проблему с WDS?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Я не понял, что именно вы сделали, но по поводу настроек посмотрите эту статью: https://learn.microsoft.com/en-us/previous-version...
    Ответ написан
  • Почему винда создает неправильную запись в route table?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Неправильный шлюз по умолчанию прилетает вам по DHCP на следующий интерфейс: Ethernet adapter VMware Network Adapter VMnet8. Его создает VMware WorkStation, а используется он в настройках по умолчанию для выхода наружу через NAT виртуалок подсоединенных к соотвествующей сети.
    Т.к. я не знаю, для чего у вас на ПК используется VMWare (и используется ли вообще - у вас там вообще всё интересно: я вижу ещё следы VirtualBox и Hyper-V), то точно сказать, что вам надо сделать, я не могу. Но, как минимум, можно в Virtual Network Editor отключить DHCP на нем - а если у вас в этой виртуальной ести еесть виртуалки - настроить на них адрес IP вручную.
    Ответ написан
    Комментировать
  • Можно ли вручную монтировать и размонтировать диски на Windows?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Если вам нужно всего лишь монтировать вручную/не монтировать автоматически диски - смотрите в сторону команды mountvol.
    Но есть подозрение, что нужно вам, на самом деле, что-то другое.
    Ответ написан
    1 комментарий