Russian Qt Forum
Май 05, 2024, 00:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [1]
1  Qt / Пользовательский интерфейс (GUI) / Re: вопрос по поводу ограничения на распространение ПО : Сентябрь 21, 2020, 22:11
Есть такая прога как Themida (правда она платная), защита высокая у програм накрытых Themida-ой. Есть встроенные антидебагер, динамическое шифрование, виртуальные функции и т.д.

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

Так сейчас работают большинство софтверников рынка (кроме оборонки или гос пос стркутур), но там деньги и ответственность другие.
2  Qt / Пользовательский интерфейс (GUI) / Re: вопрос по поводу ограничения на распространение ПО : Сентябрь 21, 2020, 21:55
Дорогие коллеги...
Если администрация не будет возражать, прошу подчистить тему и прикрепить ее.

Ответ.

Используем: https://doc.qt.io/qt-5/qsystemsemaphore.html

Пример:
Код:

    /*
     * Блок реализация повторного запуска программы, реализован как
     * кроссплатформенная составляющая из классов QT
     * *
    QSystemSemaphore semaphore("EANG41RT723PHKK1IANFGQMY", 1);  // создаём семафор
    semaphore.acquire(); // Поднимаем семафор, запрещая другим экземплярам работать с разделяемой памятью

#ifndef Q_OS_WIN32
    /* в linux разделяемая память не освобождается при аварийном завершении приложения,
     * поэтому необходимо избавиться от данного мусора
     * */
    QSharedMemory nix_fix_shared_memory("WEY247Y5U43HTFAG0H4DKH99");
    if(nix_fix_shared_memory.attach()){
        nix_fix_shared_memory.detach();
    }
#endif

    QSharedMemory sharedMemory("WEY247Y5U43HTFAG0H4DKH99");  // Создаём экземпляр разделяемой памяти
    bool is_running;            // переменную для проверки уже запущенного приложения
    if (sharedMemory.attach()){ // пытаемся присоединить экземпляр разделяемой памяти к уже существующему сегменту
        is_running = true;      // Если успешно, то определяем, что уже есть запущенный экземпляр
    }else{
        sharedMemory.create(1); // В противном случае выделяем 1 байт памяти
        is_running = false;     // И определяем, что других экземпляров не запущено
    }
    semaphore.release();        // Опускаем семафор

    // Если уже запущен один экземпляр приложения, то сообщаем об этом пользователю
    // и завершаем работу текущего экземпляра приложения
    if(is_running){
        QMessageBox msgBox;
        msgBox.setIcon(QMessageBox::Warning);
        msgBox.setText(QObject::tr("Приложение уже запущено.\n Вы можете запустить только один экземпляр приложения."));
        msgBox.exec();
        return 1;
    }
    /*
     * Завершение блока проверки повторного запуска программы
     * */

Пример рассчитан на использование в ОС WInx32 & Linx64 (MacOs и другие платформы в примере не учитывалась)
более детально можно посмотреть:
https://doc.qt.io/qt-5/qtglobal.html
https://doc.qt.io/qt-5/qsharedmemory.html

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

По вопросу дополнительных инсталляций - есть только один действенный метод на текущий момент:
Регистрация (онлайн проверка) через сервер лицензий с привязкой к серийным номерам оборудования (и прочего...).

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

Разработчик тратит средства на выпуск ПО, рекламу, доработку (обеспечивает рабочие места, нам программистам).
3  Qt / Общие вопросы / Re: Чтение и запись данных 1С 8.3 : Июнь 26, 2020, 14:03
Также нашел еще одну интересную возможность.
REST интерфейс и протокол OData

https://wonderland.v8.1c.ru/blog/avtomaticheskiy-rest-interfeys-prikladnykh-resheniy/
4  Qt / Общие вопросы / Чтение и запись данных 1С 8.3 : Июнь 26, 2020, 10:33
Добрый день Всем.
Для синхронизации справочников 1С -> Qt я ранее (для платформы Windows) использовал v83.ComConnector.
В текущем проекте используется (Linux, Ubunta 18.04), прочитал то немногое что есть и ничего толком не понял.
Остановился на технологии создания внешних компонент Native API.
Нашел вот такую статью: https://stimul.kiev.ua/materialy.htm?a=osobennosti-razrabotki-konfiguratsiy-dlya-os-linux
Если кто-то уже работал с такой технологией, прошу Вашей помощи для написания класса синхронизации справочников.
Буду очень признателен за любую информацию как правильно это сделать.
5  Qt / Базы данных / PostgreSql и передача параметра в : Июнь 19, 2020, 11:54
Добрый день, всем.
Уважаемые коллеги, прошу помощи разобраться с ошибкой:

File: ../mysqldatabase.cpp Line: 89 Function: bool mySqlDatabase::sqlCreateDatabase(const QString&)
QSqlError("42601", "QPSQL: Невозможно создать запрос", "ERROR:  syntax error at or near "("LINE 1: EXECUTE  ('mybase') ^(42601)")


Код:
   // Создаем новую базу.
    QSqlQuery createbase;
    createbase.prepare("CREATE DATABASE ? "
                       "ENCODING = 'UTF8' "
                       "LC_COLLATE = 'ru_RU.UTF-8' "
                       "LC_CTYPE = 'ru_RU.UTF-8' "
                       "TABLESPACE = pg_default "
                       "OWNER = postgres;");
    createbase.bindValue(0, name.toLower());

    if (!createbase.exec()) {
        qCritical() << createbase.lastError();
        base.close();
        return false;
    }

Из pgAdmin отрабатывает нормально:
Код:
CREATE DATABASE "mybase"
                       ENCODING = 'UTF8'
                       LC_COLLATE = 'ru_RU.UTF-8'
                       LC_CTYPE = 'ru_RU.UTF-8'
                       TABLESPACE = pg_default
                       OWNER = postgres;

Нашел костыль:
Код:
    // Создаем новую базу.
    QString mStrSql = QString("CREATE DATABASE %1 "
                              "ENCODING = 'UTF8' "
                              "LC_COLLATE = 'ru_RU.UTF-8' "
                              "LC_CTYPE = 'ru_RU.UTF-8' "
                              "TABLESPACE = pg_default "
                              "OWNER = postgres;").arg('"'+name.toLower()+'"');
    QSqlQuery createbase;
    if (!createbase.exec(mStrSql)) {
        qCritical() << createbase.lastError();
        base.close();
        return false;
    }

Но может есть другие варианты?
Буду рад обсудить.
6  Qt / Печать / Re: LimeReport - Open-source Qt генератор отчетов, релиз новой версии 1.5 : Апрель 29, 2020, 17:36
Добрый день.
Существует ли документация для разработчика.
Имеющаяся документация в очень урезанном виде.
Страниц: [1]

Страница сгенерирована за 0.054 секунд. Запросов: 24.