• Как просмотреть список установленного ПО на удаленном хосте (для локального код прикрепляю)?

    @res2001
    Developer, ex-admin
    Утилита reg умеет запрашивать реестр удаленных компов, если есть доступ, конечно: reg /?
    Эту же операцию можно сделать с помощью wmic, она то же умеет работать с удаленными компами. По моему, она дает более структурированную информацию, чем можно нарыть в реестре в "ручную". Конкретные параметры погуглите.
    Ответ написан
    2 комментария
  • Что такое указатели в С++?

    @res2001
    Developer, ex-admin
    Из всего написанного по сути сказано только:
    Указатель — это переменная, хранящая в себе адрес ячейки оперативной памяти

    остальное - какой-то шлак.

    Добавлю от себя про указатели:
    Память в компьютере адресуется побайтово.
    Биты внутри байта адресовать через указатель нельзя.
    Адрес - это просто беззнаковое целое число - номер байта в памяти.
    В 32битных процах максимально доступно 2^32 байта памяти, в 64битных - 2^64.
    Соответственно для хранения адреса в 32битных системах нужно 32 бита, т.е. 4 байта, в 64битных - 64 бита, т.е. 8 байт. Таким образом, в зависимости от разрядности процессора меняется размер указателя.

    Когда некий объект (строка, число, и прочее) сохранен в памяти он не имеет типа - это просто набор байт некоторой длины. Типизацией занимается программа. Например в процессоре существуют наборы арифметических команд для целых 1 байтовых переменных, 2 байтовых, 4 и 8 байтовых (отдельно для знаковых и беззнаковых). Т.е. это реально разные ассемблерные инструкции (например для сложения). Таким образом задавая тип указателя, вы говорите компилятору, что к памяти, адресуемой этим указателем, нужно применять инструкции для этого типа данных.
    Для типизированных указателей можно использовать адресную арифметику, потому что компилятору известен размер типа. Для не типизированных указателей (void*) адресная арифметика не возможна.
    Ответ написан
    Комментировать
  • Я написал программу на c++, но при установке ее на другой копьютер выпадает ошибка MSVCP140D.dll, что делать?

    @res2001
    Developer, ex-admin
    Я предполагаю, что в папку с приложением нужно разместить библиотеки c++.

    Да вы верно думаете. Но делать надо не так.
    Ошибка возникает потому, что в С++ вы, как правило, используете хотя бы STL - а это внешняя библиотека и она должна быть доступна программе во время запуска.
    Но можно собрать программу со статической линковкой с STL, тогда размер исполняемого файла вашей программы будет больше, но тащить за собой ничего не придется.
    В принципе, динамическая линковка с STL - это нормально. Только в случае с программой собранной в MSVC вы должны предоставить пользователю еще и runtime пакет нужной версиии. Микрософт предоставляет эти сборки runtime отдельно от MSVC (можно скачать с сайта). Этот же установщик рантайма лежит где-то в недрах установленной MSVC, можно его там найти при желании.

    Цифры в имени файла dll (140) - это и есть версия нужного вам рантайма. Версия 140 или 14.0. Она идет с MSVS 2015.
    Вот тут статья с перечислением всех актуальных версий рантайма и ссылками на них: https://www.itechtics.com/microsoft-visual-c-redis...
    Ответ написан
    Комментировать
  • Почему в c++ можно задавать статический массив переменной длины?

    @res2001
    Developer, ex-admin
    Это потому что вы компилируете с помощью gcc.
    Вообще в стандарте С++ VLA (variable length array) нет в принципе и это ошибка.
    Но VLA есть в C99 и далее. А gcc с параметрами по умолчанию разрешает использовать расширения, в т.ч. и VLA.
    Стоит включить более строгое соответствие стандарту, как вы получите ошибку и не собираемый код.

    Рекомендую это (включать строгое соответствие стандарту) делать в своих проектах всегда. А так же включать вывод всех предупреждений (-Wall -Wextra) и пытаться добиваться сборки без предупреждений.
    Наиболее "продвинутые" переводят все предупреждения в ошибки, что бы программа в принципе не собиралась с любыми предупреждениями. Это то же делается соответствующей опцией компилятора.
    Часто в таких случаях приходится некоторые предупреждения ставить в игнор, но это делается всегда осознанно, с пониманием для чего это нужно.
    Ответ написан
    3 комментария
  • Есть ли эффективый и не сложный алгоритм посика ярко выраженных пиков в 2D массивах без ML?

    @res2001
    Developer, ex-admin
    Можно находить разность соседних элементов. Если модуль разности больше какой-то величины - ярко выраженный пик.
    Фиксированную величину можно взять как среднее значение разностей или медианное или что-то другое.
    Ответ написан
  • Как откинуть 5 число с массива?

    @res2001
    Developer, ex-admin
    Просто так взять и удалить элемент из массива на Си нельзя.
    Из статического массива удалить нельзя ничего в принципе - его размер не меняется никогда.
    В динамических массивах могут быть варианты:
    Вы можете переписать хвост массива, начиная с шестого элемента, на один элемент вперед, т.е. 6 элемент станет 5 и т.д. Но при этом в конце образуется не используемый элемент, избавится от него можно перевыделением массива с помощью realloc, например. Но если это делать, то проще сразу выделить память под новый массив и скопировать весь первый массив, кроме удаляемого элемента, как писал GavriKos.
    Другой вариант - помечать подобные не используемые элементы каким-то образом. Либо писать в них какое-то значение, обозначающее для вас, что это не используемый элемент, либо хранить где-то отдельно используемый размер массива (так сделано в std::vector).
    Ответ написан
    Комментировать
  • Маскировка виртуальной сетевой карты под железную?

    @res2001
    Developer, ex-admin
    Создавайте туннель на отдельном компе, не на том, на котором крутится софт. И используйте его как шлюз для адресов, на которые ходит этот софт.
    Ответ написан
  • Почему этот код работает?

    @res2001
    Developer, ex-admin
    Код то где?

    На сколько я знаю, микрософтовский компилятор официально не поддерживает стандартов Си. Так что на самом деле, собирая Сишный код на msvc вы используете некий "микрософт Си" диалект языка.
    Так что не удивляйтесь подобным вещам.
    Некоторые фичи из более современных стандартов Си (С99, С11) в компилятор микрософт до сих пор не завезли или завезли, но в каком-то видоизмененном виде.
    Ответ написан
    Комментировать
  • Как сравнить две даты в dat?

    @res2001
    Developer, ex-admin
    Батники не умеют работать с датами. Тут все переменные строковые.
    Да, set /a умеет целочисленную арифметику, но результат все равно строковый.
    Нужно перевести даты в количество дней с начала эпохи, а потом их уже можно сравнивать стандартными средствами.
    Проще всего использовать для этих целей более продвинутые средства, умеющие работать с датами, например powershel, JS, VBS - эти скрипты при желании можно вызывать из батника.
    Но если очень хочется, можно и батником пересчитать. Алгоритм расчета есть на вики. Код можно дернуть отсюда - https://www.robvanderwoude.com/files/datediff_nt.txt
    Ответ написан
    Комментировать
  • Как правильно ввести данные?

    @res2001
    Developer, ex-admin
    Как вы планируете пользователь должен завершать работу удаленного компа?

    Например, есть команда shutdown - она требует привилегий администратора на том компе, который она будет удаленно перезагружать/останавливать.
    Ее же можно выполнить, находясь в сеансе RDP. Для обычного пользователя в RDP нет возможности выключить комп.

    Самый простой вариант без использования домена - создать на всех компах одного и того же пользователя с админскими правами и одним и тем же паролем. Тогда выключать компы удаленно можно выполнив у себя команду shutdown из под этого пользователя и указав в параметрах удаленный комп.
    Ответ написан
    Комментировать
  • Как вывести результат команды cmd в переменную?

    @res2001
    Developer, ex-admin
    Вот так должно работать:
    for  /f "delims=" %i IN ('net user %username% ^| findstr /C:"Действие пароля завершается" ') DO set var=%i
    Ответ написан
  • Как ввести результат поиска cmd в переменную?

    @res2001
    Developer, ex-admin
    Правильная команда: dir /s steam.exe
    Примерно так будет:
    for "tokens=* delims=" %%a in ('dir /s  steam.exe') do (
      move "%%~a" "путь куда перемещаем файл"
    )
    Ответ написан
    2 комментария
  • Зачем Visual Studio нужен свой runtime?

    @res2001
    Developer, ex-admin
    std::string - это то же часть микрософтовского рантайма (стандартной библиотеки), если вы собираете проект в MSVS.
    Нет никаких стандартных реализаций компилятора и libstd++, есть стандарт, где описано какой должна быть реализация. А реализаций много.
    Ответ написан
  • Роутер через время сбрасывается до заводских настроек. Как исправить?

    @res2001
    Developer, ex-admin
    Может быть нельзя прошить версию 1 сразу на 3, нужно через промежуточную 2.
    Попробуйте найти версию 2 прошивки и прошить сначала ею, а потом 2 проапгрейдить на 3.
    Еще можно поискать подходящую неофициальную прошивку, может быть такие есть для вашего роутера.
    Ответ написан
    Комментировать
  • Как сделать доступным сервис из lan и из wan по имени?

    @res2001
    Developer, ex-admin
    Добавьте на внутренний ДНС запись о сервере.
    Адреса сервера для внешнего и внутреннего ДНСа могут быть разные.
    Ответ написан
    Комментировать
  • Нет доступа к внутренней подсети как настроить машрут?

    @res2001
    Developer, ex-admin
    Встречные вопросы:
    1. На сколько понял ВПН поднимается и, например, пинги идут с ВПН IP сервера на ВПН IP клиента и наоборот?
    2. Значит проблема в доступе из сети клиента в сеть сервера и наоборот?
    3. Т.к. ВПН сервер и клиент подняты на роутерах, то предполагаю, что эти же роутеры являются шлюзами по умолчанию для компов в своих сетях?

    Если на все вопросы ответ - Да.
    То проблема в блокировке трафика фаерволами. Блокировка может происходить как на роутерах так и на конечных узлах локальными фаерами.
    Проблемы с маршрутизацией быть не должно, т.к. роутеры - шлюзы по умолчанию в своих сетях.
    Выберите по компу в обеих сетях, убедитесь, что на этих тестовых компах роутеры являются шлюзами по умолчанию, отключите на них локальные фаерволы и тестируйте. Предварительно убедитесь, что на роутерах фаервол не блокирует ВПН трафик. Так же было бы полезно во время теста смотреть на роутерах вывод tcpdump по ВПН интерфейсу.
    Ответ написан
  • Как запускать exe автоматически при попадании на ПК?

    @res2001
    Developer, ex-admin
    В такой постановке вопроса ответ - никак.

    Что бы любая программа запустилась, либо ОС должна знать, что ее надо запустить в какой-то момент, либо пользователь должен ее запустить руками.
    Для автозапуска можно использовать несоколько веток реестра, как пользовательских так и системных, так же можно использовать каталог sturtup в меню пуск (в вин10 его нет в явном виде в меню, но его можно найти в файловой системе) или же добавить Параметры->Приложения->Автозагрузка (это действие, по идее, добавляет записи вреестр).
    Еще вариант - добавить старт приложения в шедулер, повесив его на какой-либо подходящий триггер.
    После внесения соответствующих изменений и перезагрузки (или наступления триггерного события) приложение запустится.

    Так же можно запустить приложение удаленно, таких вариантов довольно много. Из встроенных средств можно использовать: wmic или powershell. Тот же psexec (о котором писал pavelsha ) и т.п. Но программа должна быть доступна на удаленном компьютере, по указываемому пути. Т.е. вы должны сначала скопировать программу на удаленный комп, а потом уже удаленно ее запускать. Как вариант - указывать сетевой путь, доступный удаленному компьютеру. Но нужно не забывать, что в случае сетевого пути, потребуется авторизация на сетевом ресурсе ... Проще скопировать локально.

    Кстати, редактировать реестр можно и удаленно. Для этого есть средства из коробки. Например команда reg add - умеет это делать. Но и тут есть своя специфика.
    Ответ написан
    Комментировать
  • Почему на линукс не работает библиотека conio.h?

    @res2001
    Developer, ex-admin
    conio.h - это чисто виндовый заголовочный файл, в линукс его нет и к стандартной библиотеке С/С++ он отношения не имеет.
    Для вашего примера он не нужен - просто уберите строку и откомпилируйте.
    Ответ написан
    Комментировать
  • Как организовать перезапуск сервиса при падении?

    @res2001
    Developer, ex-admin
    По идее если сервис падает, то он освобождает порт.

    Это только по вашей идее.
    На самом деле порт может быть еще какое-то время занят пока не придет пакет с установленным флагом FIN или не закончится тайм-аут ожидания такого пакета. Так работает протокол TCP.
    Обычно, что бы избежать ожидания закрытия порта, порт открывают с указанием флага SO_REUSEADDR.
    Возможно программа падает потому, что происходит обрыв соединения. Возможно у вас не корректно обрабатывается эта ситуация (если вообще обрабатывается).
    На счет рестарта - возможно стоит оформить ваш сервис как виндовую службу, тогда за рестарт будет отвечать виндовый Service Manager. И не понадобится костыль в виде батника.
    Ответ написан
    Комментировать
  • Как преодолевается потеря мотивации в ИТ?

    @res2001
    Developer, ex-admin
    Отдых, спорт, общение. В общем все стандартно - переключайтесь на другие занятия, которые приносят положительные эмоции. Со временем выгорание проходит и снова хочется куда-нибудь углубиться :-)
    Ответ написан
    Комментировать