Кеширование переменных Environment

Xalet

Well-known member
08.08.2008
410
0
#1
Собственно суть проблемы:

присваиваю значение переменной session.SetEnvironmentVar("имяпеременной", data). Она считывается нормально session.GetEnvironmentValue("имяпеременной").
Выключаю лотус. Открываю notes.ini нахожу переменную, очищаю, сохраняю. Запускаю лотус. session.GetEnvironmentValue("имяпеременной") упорно продолжает возвращать значение data. Где оно его запоминает, если не в notes.ini?

Версия клиента 6.5.3. Запускаю не на сервере.
 

VladSh

начинающий
Lotus team
11.12.2009
1 262
6
#2
Может где-то код забыли, который прописывает значение; например на QO базы данных/вида/формы?
 

Xalet

Well-known member
08.08.2008
410
0
#3
Может где-то код забыли, который прописывает значение; например на QO базы данных/вида/формы?
Так именно в этом коде я и проверяю, если считал из конфигурации новое значение, то заменяю сетом, если не считал, то проверяю, присвоено ли что-то уже гетом и если нет, то не разрешаю открыть базу. Но даже если бы я где-то как-то вписывал бы вызывая SetEnvironmentVar, после закрытия лотуса, оно бы появилось в notes.ini, но там как не было, так и нет, но успешно считывается значение. Непонятно только откуда.
 

TIA

:-)
Lotus team
15.05.2009
790
3
#4
xalet
Убедитесь в полной выгрузке процесса nlnotes.exe

Подробности:
Процесс Notes довольно долго выгружается из памяти. Когда окно Notes пропало, ещё не значит что процесс выгрузился. Если в момент выгрузки процесса вы начнёте загружать другой процесс, использующий ещё не выгруженные dll, видоуз не станет их выгружать, а переиспользует для нового процесса. Переменные notes.ini кэшируются в так называемой шаред-памяти dll, т.е. все процессы, использующие эту dll будут видеть одни и те же значения. Поэтому если вы быстро перегрузите notes, то изменения произведённые в notes.ini не через сервисы Notes (которые пишут в кэш в шаред-памяти) в кэше не обновятся.
Чтобы быть уверенным - смотрите когда удалится процесс нотеса в TaskManager или пользуйте KillNotes.exe