Тема: Сервер не отдаёт фиксированную лицензию

Ключ SighNet на 10 лицензий. Создала в таблице лицензий 3 модуля, по 5 лицензий каждый. Лицензии раздаю по хэндлам (если по рабочим станциям, та же проблема). На хост 2 фиксированных лицензии и 2 плавающих. Сначала всё регистрируется нормально (пытаюсь с двух хостов, на одном из которых установлен сам сервер).
Затем закрываю копию (фиксированная лицензия), и с этого же (судя по надписи на лицензии) хоста пытаюсь запустить эту программу снова. Сервер, я так понимаю, должен отдать эту фиксированную лицензию, ведь копия той же программы и тот же хост. Но этого не происходит. Если все лицензии заняты (2 фиксированных и 2 плавающих), то просто не могу залогиниться, а если есть еще свободные лицензии - занимаются они, а эта висит..

На первом скриншоте это верхняя лицензия.

Когда в итоге сбрасываю её, затем запускаю снова программу на указанном хосте, новая регистрация этой копии проходит нормально. Затем закрываю копию, лицензия становится неактивной, и снова запускаю - вуаля, всё работает, сервер отдал эту лицензию.
Однако закрываю одну из копий приложения на другом хосте (тоже с фиксированной лицензией), а затем запускаю снова, и снова та же ситуация возникает - сервер не отдает эту лицензию, хотя приложение и хост совпадают (скриншот 2).

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

Login возвращает ошибку 10 - Сетевой ресурс ключа Guardant Net исчерпан. Но ведь одна лицензия не действует, и она зарегистрирована на ЭТО приложение, которое запускается, и на ЭТОТ хост, с которого запускается приложение.. почему сервер её не отдаёт? Причём так странно - сбрасываешь, подключаешься (проходит), выходишь, снова подключаешься, и тогда подключение повторное нормально проходит. Но стоит выйти из другой лицензии, с другого хоста, для неё повторяется всё то же самое.

Re: Сервер не отдаёт фиксированную лицензию

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

Re: Сервер не отдаёт фиксированную лицензию

Отключила плавающие лицензии. Оставила 2 фиксированных на один хост.
Заполнила один модуль 2мя копиями программы с одного хоста (asdu-117).

Закрываю одну из копий приложения, лицензия становится неактивной, но фиксированной за хостом asdu-117

Далее снова на хосте asdu-117 запускаю приложение, подключение проходит, сервер отдает эту лицензию.

Теперь занимаю второй модуль двумя копиями программы, но с другого хоста - asdu916

Закрываю одну из копий приложения на asdu916

Далее запускаю снова, также всё срабатывает - сервер отдаёт эту фиксированную лицензию новой копии программы с asdu916. При таком раскладе всё работает. Да не всё...

Сбрасываю все лицензии чтобы рассмотреть другую ситуацию.
Теперь с одного хоста asdu117 запускаю 2 приложения (на первый модуль и на второй - по одной лицензии с каждого модуля)

Одну программу закрываю, лицензия неактивна, но фиксируется

Запускаю эту программу с asdu-117 снова, лицензия занимается, всё ОК.
Теперь с другого хоста asdu916 занимаю по одной лицензии с каждого модуля (получается как раз, по 2 лицензии с хоста, все фиксированные лицензии получаются заняты).

Теперь закрываю копию приложения на asdu-117.

Пытаюсь копию запустить на этом же хосте asdu117, и всё, лицензия висит, сервер её не отдаёт. Закрываю второе приложение на asdu-117.

Пытаюсь запустить второе приложение на этом хосте, то же самое - сервер не отдаёт и эту лицензию.
Тогда закрываю приложения на другом хосте - asdu916

Затем по очереди запускаю их на том же asdu916 - сервер благополучно отдаёт им эти лицензии, но на asdu-117 всё ещё нет...

Еще один момент. Опять вырубила программы на asdu916, то есть все лицензии фиксированы за соответствующими хостами, но неактивны, как на предыдущем скриншоте. Теперь в такой ситуации снова пытаюсь запустить копии с asdu-117. Как только запускаю приложение GuardantApp на asdu-117, фиксированная лицензия на это же приложение, но с хоста asdu916, исчезает. Со вторым приложением GuardantApp1 точно также. Эти лицензии сами сбрасываются. Причём запускаю с одного хоста, а сбрасываются лицензии другого хоста...

По итогу получаем: (везде речь о фиксированных лицензиях, плавающие отключены)

1. Если лицензии одного модуля занимать только с одного хоста, то всё работает, лицензии не подвисают.

2. Если занять лицензии разных модулей с одного хоста (в первый раз), также всё работает

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

3. Когда все копии отключены, а все лицензии зафиксированы за своими хостами, но неактивны

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

Надеюсь это поможет.. жду ответа.

Re: Сервер не отдаёт фиксированную лицензию

Crazy-veronik пишет:

Надеюсь это поможет.. жду ответа.

Да, наверняка, спасибо!
Будем воспроизводить у себя, поскольку поведение весьма странное.
Результаты и выводы сообщим немного позже.

Re: Сервер не отдаёт фиксированную лицензию

Вот мой ответ с соседней ветки, там я начала описывать свою проблему.. https://forum.guardant.ru/topic/635/

1. Какой версии сервер сетевых ключей используется?
- GLDS 7.0.888.0

2. Guardant API из состава SDK какой версии использовался при защите приложения?
- Guardant 6.1

3. В среде какой ОС запущен сервер? Выложите (на удобном файлообменнике) отчет системной утилиты msinfo32.exe (в командной строке нужно набрать msinfo32.exe, после запуска утилиты сохранить отчет в формате *.nfo (меню Файл/Сохранить)) для тестируемого компьютера и укажите ссылку.
- ОС Сервера Windows7x32, файл сведений тут -> https://cloud.mail.ru/public/8UXB/rdegSd9yF

4. Сервер сетевых ключей, сетевой ключ и защищенное приложение установлены на одном компьютере (если нет, то какие ОС установлены на ПК-сервере и ПК-клиенте, приложите для них отчеты msinfo32.exe)?
- Сервер и сетевой ключ установлены на одном компе с ОС, описанной в пункте 3 (asdu-117), так же этот хост используется и как клиентский ПК, с которого запускаются защищенные приложения. При тестировании используется также еще один ПК (asdu916) с ОС Windows 8x64, сведения о системе тут-> https://cloud.mail.ru/public/HL21/wqioLZeid

5. Используются ли при тестировании средства виртуализации или удаленного доступа (если да, то какие именно)?
- Нет

6. Приложите 2 скриншота WEB-интерфейса сервера сетевых ключей полученные следующим образом: 1 - необходимо залогиниться на ключ и выполнить логаут, чтобы лицензия осталась неактивной и фиксированной за хостом, далее кликнуть по данной лицензии для просмотра информации о ней и сделать скриншот. 2 - еще раз с того же хоста залогиниться на ключ но логаут не выполнять, чтобы появилась вторая, занятая и активная, лицензия, на нее также надо кликнуть и сделать скриншот.
- 1 скриншот


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

Совсем уже запуталась, не понимаю, почему так происходит. То сбрасываются лицензии, то висят и сервер их не отдает новым копиям..

Re: Сервер не отдаёт фиксированную лицензию

Даже и не знаю.. может в коде чего не так:

struct DongleData //структура данных ключа
{
    DWORD   _RemoteMode;
    DWORD   _Flags;
    DWORD   _Ver;
    DWORD   _Mask;
    DWORD   _Type;
    DWORD   _Models;
    DWORD   _Interfaces;
    vector <DWORD>    _DongleID;

    DongleData() :_RemoteMode(0), _Ver(0) , _Mask(0),
        _Flags(GrdFM_ID |    GrdFM_Ver |    GrdFM_Mask | GrdFM_Type),
        _Type(GrdDT_Win), _Models(GrdFMM_ALL), _Interfaces(GrdFMI_ALL)
    {}
};

//коды доступа
#define GrdDC_PUB_CODE               0xXXXXXXXX  // public code
#define GrdDC_PR_READ_CODE         0xXXXXXXXX  // private read code
#define GrdDC_PR_WRITE_CODE        0xXXXXXXXX  // private write code
#define GrdDC_PR_MASTER_CODE       0xXXXXXXXX  // private master code

BOOL bDogleIsFound(FALSE);

BOOL CGuardantAppApp::InitInstance()
{
    CGrdDongle* GrdDongle = new CGrdDongle;
    dt._DongleID = { 0x34334e40, 0x34334c16, 0x34334c41 }; //осуществляется поиск сразу нескольких ключей
    dt._RemoteMode = GrdFMR_Remote; //только сетевые ключи
    for (int j = 0;j < static_cast<int>(dt._DongleID.size());j++) 
    {
        if (RunDongleSearch(GrdDongle,dt, j)) {
           bDogleIsFound = TRUE;
           break;
         }
    }
    if (!bDogleIsFound) { AfxMessageBox(_T("Подходящий ключ не найден")); return TRUE; }

    //если ключ найден, запускается окно приложения
    CGuardantAppDlg dlg;
    m_pMainWnd = &dlg;
    INT_PTR nResponse = dlg.DoModal();
    if (nResponse == IDOK)
    {
           //DoSomething
    }
    else if (nResponse == IDCANCEL)
    {

    }
    else if (nResponse == -1)
    {
        TRACE(traceAppMsg, 0, "Предупреждение. Не удалось создать диалоговое окно, поэтому работа приложения неожиданно завершена.\n");
    }

    //после завершения работы приложения Logout
    GrdDongle->Logout(MODULE_NUM);
    delete GrdDongle;
}

BOOL CGuardantAppApp::RunDongleSearch(CGrdDongle* GrdDongle, DongleData dt, int num)
{
        GrdDongle->Initialize(dt._RemoteMode, dt._Flags, 0, dt._DongleID[num], 0, dt._Ver, dt._Mask, 0, 0, 0);
        int nRet = GrdDongle->Create(GrdDC_PUB_CODE,
        GrdDC_PR_READ_CODE,
        GrdDC_PR_WRITE_CODE,
        GrdDC_PR_MASTER_CODE, 0, 0);
        nRet = GrdDongle->Login(MODULE_NUM, GrdLM_PerHandle);
        if (nRet)
        {
            AfxMessageBox(_T("Dongle login failed!"));
            return FALSE;
         }
         else if (!nRet)
         {
            strMess.Format(_T("Dongle %x is found"), dt._DongleID[num]);
            AfxMessageBox(strMess);
          }
         nRet = GrdDongle->Check();
         if (nRet)
         {
            //AfxMessageBox(_T("Dongle not found!"));
            return FALSE;
         }
         return TRUE;
}

Re: Сервер не отдаёт фиксированную лицензию

Crazy-veronik пишет:

2. Guardant API из состава SDK какой версии использовался при защите приложения?
- Guardant 6.1

Это слишком старая версия, соберите приложение с Guardant API из современного SDK и протестируйте.