Задать вопрос
  • Как настроить множественное подключение с разными пользователями?

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

    @res2001
    Developer, ex-admin
    У вас не верно перегружен operator* - он должен возвращать объект или ссылку на объект своего класса (т.е. он должен возвращать Kvadrat&): https://en.cppreference.com/w/cpp/language/operators

    Параметры передаются не в перегрузку, а в функцию или метод (перегруженные операторы частный случай метода).

    Для бинарных операторов вызывается перегруженная операция для класса, стоящего слева в выражении. Например для kvad * k - вызовется kvad.operator*(k).

    Если вы напишете k * kvad, то будет ошибка компиляции, т.к. компилятор не сможет преобразовать kvad во float. Но вы можете этому помочь, перегрузив operator float() для Kvadrat.
    Ответ написан
    Комментировать
  • Настройка IPSec средствами С++?

    @res2001
    Developer, ex-admin
    Какая ОС интересует? IPSec входит в стандарт стека TCP/IP, который предоставляется ОС. Соответственно и все API ОС зависимое.
    В винде это WFP API.
    В никсах все несколько сложнее - там задействовано как ядро ОС так и стороннее ПО. Больше подробностей можете посмотреть, например тут и тут.
    Ответ написан
    2 комментария
  • Почему две сессии OpenVPN из одной сети убивают друг друга?

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

    @res2001
    Developer, ex-admin
    Символ крышки ^ является "специальным" для cmd. Так что его не стоит использовать в качестве разделителя, если вы планируете решать задачу на батниках.
    Вообще вашу задачу можно решить так:
    @echo off
    
    set "str=hjh#jhjh#hkjh#khkjh##khkjh"
    set "delim=#"
    set "count=0"
    
    :loop
    call:finddelims
    if defined str goto:loop
    echo.%count%
    goto:eof
    
    :finddelims
    for /f "tokens=1,* delims=%delim%" %%a in ("%str%") do (
    	echo.%%a
    	set /a "count+=1"
    	set "str=%%b"
    )

    Тут я выбрал разделителем символ #, строку задал в переменной str произвольную с разделителями.
    Двойной разделитель считается как 1. Разделитель стоящий в конце строки не учитывается.
    Ответ написан
  • Как переустановить Windows 10 удалённо без флешки и диска?

    @res2001
    Developer, ex-admin
    Подобные вещи готовятся заранее, фактически на этапе покупки компьютера - железо ПК должно поддерживать аппаратно удаленный доступ. Технологии для этого есть (IPMI, vPro), но обычно они применяются только в серверном железе, т.к. нормально стоят.
    Есть и более дешевый вариант - удаленная загрузка (PXE). Но то же требует предварительной подготовки и аппаратной поддержки.
    Чисто программные вариант - это что-то вроде ответа от Александр. Либо подготовка установочного носителя с файлом ответов для установщика, либо восстановление резервной копии, что то же требует предварительной подготовки.
    Ответ написан
  • Почему не срабатывает запись в файл?

    @res2001
    Developer, ex-admin
    если делаю: echo %pid% > pack.id
    пишет что вывод команд echo отключен.

    Это происходит когда переменная %pid% не определена (отсутствует).
    Если не вводить символы и просто нажать Enter, то вываливается "ошибка синтаксиса".

    Ошибка возникает на этой строке:
    if /i %pid_flag% EQU y
    когда переменная %pid_flag% не определена. Используйте такой вариант:
    if /i "%pid_flag%" EQU "y"
    И не ясно какого вывода в файл вы ждете?
    Если от этой команды:
    set /A pid=%pid%+1 > pack.id
    то не дождетесь - set ничего не выводит на консоль, если она выполнилась успешно.
    Ответ написан
  • Как вывести данные в таблицу с 4 столбцами?

    @res2001
    Developer, ex-admin
    for (char I = 'A', i = 'a'; I <= 'Z'; ++I, ++i) {
            cout << setw(54) << " | " << setw(4) << I << " | " << setw(13) << static_cast<int>(I) << " | ";
            cout << setw(4) << i << " | " << setw(13) << static_cast<int>(i) << " | " << endl;
    }
    Ответ написан
    Комментировать
  • Как сделать конфиг для CMD/BAT с массивом параметров?

    @res2001
    Developer, ex-admin
    Массивов в cmd нет, но можно их имитировать, генерируя имя переменной на лету:
    set "VAL_%IDX1%_%IDX2%=%VALUES%"
    где переменные IDX1 и IDX2 содержат соответствующие индексы. Вместо индексов, можно использовать,например имена полей из конфига.
    Если структура достаточно большая то переменных будет много. На мой взгляд - это какой-то тупиковый вариант.

    Еще проще: конфиг пишите в формате объявления переменных для cmd (т.е. set "Tables_2_f1_name=Id") файлу дайте расширение bat или cmd (или до запуска копируйте конфиг в bat/cmd) и просто вызывайте его как вложенный батник:
    call config.bat
    Если в конфиге не указывать команду set непосредственно, то напрямую вызвать его через call не получится, но можно в простом цикле читать конфиг построчно и подставлять в команду set.

    Возможно было бы проще на каждую строку данных из файла фильтровать конфиг с помощью findstr, в
    ыбирая нужную строку. После первой фильтрации конфиг будет закэширован и последующие фильтрации будут происходить быстрее.
    Или, если структуры меняются редко, просто зашить их в код батника.
    Ответ написан
  • Получить результат vbs (дату). Удалить файл с таким именем с помощью cmd. Как это сделать?

    @res2001
    Developer, ex-admin
    for /f "delims=" %%a in ('cscript //nologo C:\Users\Admin\Documents\123\date.vbs') do del /f /q %%a.vbs

    За подробностями: for /?
    Ответ написан
    Комментировать
  • Скрипт для удаления файлов до определенного часа в Windows?

    @res2001
    Developer, ex-admin
    Вчера отвечал на похожий вопрос, но у вас немного сложнее.
    С помощью командного файла (cmd) можно это сделать примерно следующим образом:
    Получить список файлов отсортированных в обратном порядке по времени модификации файла можно с помощью команды:
    dir /n /-c /a-d /o-d /tw *.*
    Вычислить время на час назад можно используя встроенную переменную %TIME%, которая возвращает текущее время. Переменная %DATE% - возвращает текущую дату. Не забудьте вариант смены суток. cmd не умеет работать с датой и временем, всю арифметику с датой/временем придется писать самому (выделять из %TIME% минуты и часы и производить с ними арифметические операции). Тут надо еще учесть, что числа, начинающиеся на 0 - для cmd восьмеричные и то что формат данных в %DATE% и %TIME% (и в выводе dir) зависит от установок текущей локали ОС.
    В выводе dir будет время и дата, сравниваете ее с текущей датой и вычисленным временем и если надо удаляете файл. Т.к. файлы будут отсортированы в обратном порядке по дате/времени, то после первого файла не удовлетворяющего условию можно завершать обработку.
    В помощь:
    dir /?
    for /? (ваш вариант for /f)
    set /? (для арифметики: set /a)
    Выделение подстроки из переменной описано в set /?

    В целом все можно реализовать, но вычисление даты/времени на час назад может стать не тривиальной задачей, если учитывать переход суток (а так же переход даты - дней, месяцев и годов).
    Так что, я думаю, что лучше предпочесть вариант на PoSh.
    Ответ написан
    Комментировать
  • CMD bat, как сортировать файлы в папке по дате изменения?

    @res2001
    Developer, ex-admin
    Список файлов в отсортированном в обратном порядке по дате виде можно получить с помощью команды:
    dir /a-d /o-d /b *.exe
    Вывод dir заверните в for /f и обрабатывайте только первую запись. Первая запись в выводе dir и будет имя нужного установщика.
    Ответ написан
    1 комментарий
  • Линковка с библиотекой C++?

    @res2001
    Developer, ex-admin
    mmsystem.h и winmm.lib - это стандартные виндовый заголовочный файл и библиотека, предоставляется вместе с Windows SDK, который входит в состав Visual Studio. mmsystem.h в студии доступен изначально, просто используете его в #include, копировать его в свой проект не нужно. winmm.lib то же доступен, но его надо подключить к проекту - опция -lwinmm.lib компилятора или задать в свойствах проекта как дополнительную используемую библиотеку, если используете IDE. По умолчанию она не подключена.

    Вообще для подключения сторонних библиотек к любому С/С++ проекту надо:
    1.добавить путь где лежать заголовочные файлы библиотеки опцией -I<path header files> в команду запуска компилятора.
    2.добавить путь где лежат lib файлы (lib для msvc) библиотеки в опцию -L<path to lib files>. Если библиотечный файл один, то этот пункт можно пропустить и задать полный путь в п.3. Если файлов несколько, то проще задать путь к каталогу в опции -L, а в п.3 указывать только имя конкретного файла библиотеки.
    3.добавить имя файла библиотеки (lib файла) в опцию -l<lib name> или полный путь к lib файлу.

    Если вы собираете из IDE, то те же действия надо проделать в настройках проекта. Опции компилятора практически универсальны - те же опции (и аналогичный подход) используются в msvc, gcc, clang и других компиляторах.
    По сборке библиотек с Qt проектом:
    В pro файле:
    переменная LIBS - задаются опции -L и -l компилятора (п.2 и п.3)
    переменная INCLUDEPATH - задаются опции -I компилятора (п.1)
    Например:
    INCLUDEPATH += -Ipath/to/header/files
    LIBS += -Lpath/to/lib/files -lmylibfile

    Это все легко гуглится.
    Ответ написан
    Комментировать
  • Использование ip диапазона вне разрешенных для локальной сети?

    @res2001
    Developer, ex-admin
    Максимум чем грозит использование белых адресов внутри сети - это тем, что компы при обращении к ресурсам в интернете с адресами из используемого диапазона будут попадать на свои локальные ресурсы.

    В случае попадания пакета с подобным адресом источника в интернет он там и умрет без ответа. Скорее всего его прибьет свой же провайдер. Если же вдруг не прибьет и пакет дойдет до адресата, то ответ будет отправлен реальному владельцу этого адреса, а не вам.

    Скорее всего, подобная адресация используется для предотвращения выхода в интернет даже если вдруг другие механизмы защиты не сработают.
    Ответ написан
    2 комментария
  • Почему фаервол блокирует пакеты разрешенного приложения?

    @res2001
    Developer, ex-admin
    Все ходят через фаервол.
    Из логов видно, что приложение пытается подключиться по адресу 104.16.58.5 на порт 443 и у него это не получается - фаервол блокирует (другой вариант - сам сервер не доступен).

    Не очень понятно где именно вы смотрите сетевую активность.
    Ответ написан
  • Почему в tiny-AES не могу скрыть ключ?

    @res2001
    Developer, ex-admin
    1.зашивать в бинарник зашифрованный пароль и программно его расшифровывать каким угодно алгоритмом.
    2.Вычислять пароль на лету любым способом, который придумаете.
    3.Запрашивать пароль у пользователя со стандартного входа - это был бы самый подходящий вариант - пусть пользователь сам думает как уберечь пароль от чужих глаз.
    Ответ написан
  • Что нужно установить/настроить для компиляции Python3.7 модулей в windows10?

    @res2001
    Developer, ex-admin
    В студии есть преднастроенная коммандная строка, в меню пуск ярлык называется "x64 Native Tools Command Prompt for VS 2017" и аналогичный для x86 версии.
    Эти ярлыки запускают vcvars64.bat и vcvars32.bat соответственно.
    Да, там в итоге запускается VsDevCmd.bat, но он там запускается в преднастроенном окружении для соответствующей версии компилятора (x64/x86).
    Рекомендую использовать vcvars64.bat и vcvars32, а не VsDevCmd.bat.
    Ответ написан
  • Как составить программу чтобы определить симметричность одномерного массива из k элементов?

    @res2001
    Developer, ex-admin
    Примерно так же как и определение палиндромов из этого примера (смотрите пример в конце). Нужно только заменить строки на вектора.
    Ответ написан
    Комментировать
  • Каким наиболее простым способом можно заменить запуск внешней команды в cmd на GUI программу с Drag & Drop?

    @res2001
    Developer, ex-admin
    Если вам нужно сделать ввод имен файлов, то это можно сделать непосредственно в командном файле.
    Команда
    set /p filename="Enter file name: "
    Выведет запрос на ввод имени файла. Можно вводить руками, а можно перетащить из проводника или с раб.стола любой файл. Полное имя файла будет в переменной filename:
    echo.%filename%
    Ответ написан
    Комментировать
  • Почему в диспетчере задач показывается не вся задействованная оперативная память?

    @res2001
    Developer, ex-admin
    Кэш винды в процессах не показывается, хотя под него память выделяется. Смотрите закладку Perfomance->Memory
    Ответ написан
    Комментировать