Код: Выделить всё
IF IsTermServer()
! load/save INI
ELSE
! load/save INI
END
Модератор: Дед Пахом
Код: Выделить всё
IF IsTermServer()
! load/save INI
ELSE
! load/save INI
END
И можно в программе проверять, если еще нет INI в личном каталоге - скопировать общий INI в личную папку.перевести всех на хранение в личном каталоге
а поподробнее, личный в виндовс, или мною созданный?kreator писал(а):Универсально - перевести всех на хранение в личном каталоге. Что этому мешает?
А это где хранить, в каком iniAdmin писал(а):Код: Выделить всё
IF IsTermServer() ! load/save INI ELSE ! load/save INI END
Если не трудно пару строк кода, как это должно быть.finsoftrz писал(а):На мой взгляд, самое простое при работе с tps создавать для каждого пользователя свой домашний подкаталог в каталоге программы. Удобно переносить при потребности - все, что нужно для программы лежит в одном каталоге.
Ну, если С10, то в нём в глобальных настройках App есть возможность организовать ini-файл в разных системных папках, в частности, в папке "Документы" (в виндоусовой нотации "CSIDL_Personal"). Тут же можно указать подкаталог для название разработчика и для названия программы, если надо (типа будет так "Документы\SoftVelocity\Clarion10.0"). Класс INI сам создаст все эти папки и файл. Название файла по exe-шнику, dll-ки пишут тоже туда (их настраивать вообще не надо).gopstop2007 писал(а):Хочу добавить, программа написана на С10 ABC, multi DLL
Если пользователь удалит exe-шник у себя на диска, ну и ладно, типа "сам дурак". А если на серваке? Есть политика безопасности, по ней из папки, где exe-шник, разрешён только запуск, никаких дописок, удалений и т.д. Мы делаем ярлык на рабочем столе пользователя, ярлык ссылается на exe-шник в папке на сервере. И не важно, терминалка или так. Пользователь при этом может даже и не догадываться на каком сервере запустился.finsoftrz писал(а):На мой взгляд, самое простое при работе с tps создавать для каждого пользователя свой домашний подкаталог в каталоге программы. Удобно переносить при потребности - все, что нужно для программы лежит в одном каталоге.
Код: Выделить всё
MODULE('Shell32.dll')
SHGetSpecialFolderPath(UNSIGNED,*CSTRING,Ushort,byte),Long,PASCAL,RAW,NAME('SHGetSpecialFolderPathA')
END
SHGetSpecialFolderPath(0,Loc:IniPath,26,True)
Код: Выделить всё
IF Len(Set:SaveIni)=0 THEN Set:SaveIni = d:\MyApp\myapp.ini END
Код: Выделить всё
d:\MyApp\myapp.ini
Код: Выделить всё
IF IsTermServer()
c:\User1\myapp.ini
ELSE
d:\MyApp\myapp.ini
END
это урезанный вариант CSIDL_LOCAL_APPDATA по пользователюkreator писал(а):Должно быть нормально. Только что за "c:\User1\"?
Хозяин-барин. Я бы не стал морочиться. Кларион нормально всё пишет в CSIDL_Personal. Фактически не нужно ни единой строчки писать для этого.gopstop2007 писал(а):это урезанный вариант CSIDL_LOCAL_APPDATA по пользователю
Код: Выделить всё
INIMgr.Init(svSpecialFolder.GetDir(SV:CSIDL_PERSONAL, '' & '\' & '\TestPersonal\') & '\' & 'Test.INI', NVD_INI)
Код: Выделить всё
INIMgr.Init('.\Test.INI', NVD_INI)
Так вроде всё решили. IsTermServer() определяет тип. В INIMgr.Init файл ini изменяется. Или сразу есть свойство INI-класса - FileName.gopstop2007 писал(а):Появилось время и возвращаюсь к данному вопросу.
Как реализовать, чтобы до открытия программы, программа знала какой из
Код: Выделить всё
INIMgr.Init(svSpecialFolder.GetDir(SV:CSIDL_PERSONAL, '' & '\' & '\TestPersonal\') & '\' & 'Test.INI', NVD_INI)
или
Код: Выделить всё
INIMgr.Init('.\Test.INI', NVD_INI)
ini файл открывать?
Схематично да Где хранить само значение IsTermServer()? При входе программы каждый раз спрашивать терминальный режим или нет, не кошерно . Значить надо где-то хранить данное значение. В реестре хранить на сервере (Server 2008 или Server 2012) вроде тоже проблемы, для терминального пользователя, если не прав - поправьте. Решил попробовать хранить значение в локальном ini ('.\TestPopUp.ini'), не знаю правильное ли решение...kreator писал(а):Так вроде всё решили. IsTermServer() определяет тип. В INIMgr.Init файл ini изменяется. Или сразу есть свойство INI-класса - FileName.
Код: Выделить всё
[Preserved]
Terminal_Used=1
Код: Выделить всё
INIMgr.Init('.\TestPopUp.INI', NVD_INI)
Terminal_Used=INIMgr.TryFetch('Preserved','Terminal_Used')
! === проверяем терминальный режим или нет =================
IF Terminal_Used = 1 ! terminal
svSpecialFolder.CreateDirIn(SV:CSIDL_PERSONAL, '' & '\' & '\TestPopUpPersonal\' )
INIMgr.Init(svSpecialFolder.GetDir(SV:CSIDL_PERSONAL, '' & '\' & '\TestPopUpPersonal\') & '\' & 'TestPopUp.INI', NVD_INI)
ELSE
INIMgr.Init('.\TestPopUp.INI', NVD_INI) ! Configure INIManager to use INI file
END