22.12.2010, 10:34 | #21 |
Ищущий знания...
|
Цитата:
Сообщение от d&m
конечно, я понимаю, что проект полезный и в будущем очень пригодится...
НО, правильно я вас понял - мне нужно у всех пользователей руками почистить локальный кэш, чтобы этот проект заработал? просто пользователей достаточно много, потому как раз и хочется получить более менее автоматизированное решение по очистке кэша... воспринимайте это как особенность запуска в эксплуатацию этого механизма P.S. когда, например, внедряется программа, при старте системы в неё надо много чего внести руками, что бы она в будущем работала
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: Bega (1). |
22.12.2010, 10:43 | #22 |
MCT
|
да - все понял.
Вариант удаления кэша вручную не рассматривается - т.к. юзеров много. Может у кого-то есть предложения, как централизовано удалить кэш?? возвращаясь к первому посту в теме:
__________________
Sometimes there is a moment as you are awakening - when you become aware of the real world around you, - but you are still dreaming. - You may think you can fly but you do better not try. |
|
22.12.2010, 10:47 | #23 |
Участник
|
А может вывести пункт меню для очистки куда-нибудь, дать доступ к нему всем пользователям и попросить (по почте, например) запустить его один раз?
|
|
22.12.2010, 11:09 | #24 |
NavAx
|
DAX 3.0. У нас у пользователей ярлык на рабочем столе на vbs скрипт (лежит в сети).
X++: Const DeleteReadOnly = True Dim Shell, fso, WshNetwork, AOS Set fso = CreateObject("Scripting.FileSystemObject") Set Shell = CreateObject("WScript.Shell") Set WshNetwork = WScript.CreateObject("WScript.Network") ' Очистка кэша mask = Shell.ExpandEnvironmentStrings("%UserProfile%\Local Settings\Application Data\*.aoc") If fso.FileExists(mask) Then fso.DeleteFile mask, DeleteReadOnly Shell.run("\\Server\dfs\AxClientStart\ok.axc") WScript.Sleep 1000 Set Shell = Nothing Set fso = Nothing Set WshNetwork = Nothing |
|
22.12.2010, 11:52 | #25 |
MCT
|
а для Vista и выше? там ведь путь уже другой...
__________________
Sometimes there is a moment as you are awakening - when you become aware of the real world around you, - but you are still dreaming. - You may think you can fly but you do better not try. |
|
22.12.2010, 11:55 | #26 |
Участник
|
Практически на всех проектах делаю кнопку "Обновить приложение" в основном меню (код взят с форума). Пользователи на запуске очень быстро привыкают ее нажимать при любых проблемах
__________________
Ivanhoe as is.. |
|
22.12.2010, 12:04 | #27 |
NavAx
|
|
|
22.12.2010, 13:27 | #28 |
Модератор
|
Цитата:
Как она реализована?
__________________
This posting is provided "AS IS" with no warranties, and confers no rights. |
|
22.12.2010, 13:45 | #29 |
Участник
|
Кнопка вызывает простейший класс с таким кодом (для 4.0):
X++: xSession::removeAOC(); SysTreeNode::refreshAll(); SysFlushDictionary::doFlush(); SysFlushAOD::doFlush(); xSession::updateAOC();
__________________
Ivanhoe as is.. |
|
22.12.2010, 13:51 | #30 |
Участник
|
В 2009-й использую:
X++: xSession::removeAOC(); SysTreeNode::refreshAll(); SysFlushDictionary::main(null); SysFlushAOD::main(null); SysFlushData::main(null); xSession::updateAOC(); |
|
22.12.2010, 14:30 | #31 |
Модератор
|
__________________
This posting is provided "AS IS" with no warranties, and confers no rights. |
|
27.02.2011, 23:25 | #32 |
Боец
|
см. также стандартную реализацию чистки кэша для АОСа (нескольких АОСов):
Каждый раз, когда мы выполняем такие действия как "Обновить AOD", "Обновить словарь данных" и т.д., АОС (ы) получает соответствующую команду посредством вызова метода SysEvent::fireEvent(SysEventType::XXXX); в классах SysFlushAOD, SysFlushData C помощью класса SysEventHandler АОС сканирует таблицу SysEvent на наличие команд и исполняет их. Запускается этот огород здесь: \Classes\Application\new Наверное этот механизм можно использовать и для клиентских сессий, подпилив совсем чуть-чуть. |
|
28.02.2011, 09:57 | #33 |
Участник
|
Никто не сталкивался с такой проблемой?: очищаем кэш, пользователь закрывает приложение, запускает снова и получает ошибку:
Чаще всего это происходит на Windows 7 но также бывает и на XP. Опытным путем выяснили, что ошибка возникает после SysFlushAOD::main(null), а именно после SysFlushAOD::doFlush() внутри main(). Лечится это только ручным удалением кэша с диска. Версия DAX2009 SP1 RU6. Последний раз редактировалось Bega; 28.02.2011 в 10:07. |
|
28.02.2011, 10:08 | #34 |
Боец
|
Цитата:
Сообщение от Bega
Никто не сталкивался с такой проблемой?: очищаем кэш, пользователь закрывает приложение, запускает снова и получает ошибку:
Вложение 6628 Чаще всего это происходит на Windows 7 но также бывает и на XP. Опытным путем выяснили, что ошибка возникает после SysFlushAOD::main(null), а именно после SysFlushAOD::doFlush() внутри main(). Лечится это только ручным удалением кэша с диска. Я вот думаю, что нужно написать прямое удаление файлов кэша при выходе пользователя из приложения. SysFlush** как-то кривенько работает. |
|
28.02.2011, 10:13 | #35 |
Участник
|
Цитата:
Сообщение от DSPIC
Сталкивались. Но у нас такой эффект проявлялся при смене компании, причем на совершенно стандартном приложении (AX2009). Да, пока ручками кэш не удалишь, клиент падает. Так и не вылечили - мы просто начали использовать одну компанию (она пости не использовалась).
Я вот думаю, что нужно написать прямое удаление файлов кэша при выходе пользователя из приложения. SysFlush** как-то кривенько работает. |
|
28.02.2011, 11:24 | #36 |
Боец
|
Цитата:
Сообщение от Bega
Пытались удалять кэш при выходе, но не смогли найти то место (методы Application, Info, Session и т.д.), которое вызывается непосредственно после того, как это кэш будет записан на диск при выходе. Точно так же не смогли найти место, где вставить удаление кэша перед его использованием при запуске клиента.
Можно так сделать: в методе \Classes\Application\closingDown вызывать .bat файл с отложенным запуском, в отдельном потоке. Т.е. аксапта закрывается, параллельно вызывается bat файл в отдельном потоке, который либо по тайм-ауту, либо ориентируясь на запущенный процесс ax32.exe, вызывает удаление файлов кэша. Батник можно либо подготовить как статический, но лучше генерить на лету, передавай туда PID процесса клиента. Вызов консольного черного окошка можно скрыть, если вызов делать через .net сборки (createProcess), переадресовав streamOutput. Не самое красивое решение, но должно работать надежно. |
|
05.06.2011, 20:53 | #37 |
Участник
|
Цитата:
Сообщение от Bega
Никто не сталкивался с такой проблемой?: очищаем кэш, пользователь закрывает приложение, запускает снова и получает ошибку:
Вложение 6628 Чаще всего это происходит на Windows 7 но также бывает и на XP. Опытным путем выяснили, что ошибка возникает после SysFlushAOD::main(null), а именно после SysFlushAOD::doFlush() внутри main(). Лечится это только ручным удалением кэша с диска. Версия DAX2009 SP1 RU6.
__________________
Ivanhoe as is.. |
|
06.06.2011, 09:11 | #38 |
Участник
|
|
|
06.06.2011, 12:29 | #39 |
Участник
|
Странно, я использую такой код (см. ниже), проблем с открытием клиентов пока не было, хотя есть ощущение что формы не обновляются. DAX 2009 SP1 RU6.
X++: xSession::removeAOC(); SysTreeNode::refreshAll(); SysFlushDictionary::doFlush(); SysFlushAOD::doFlush(); xSession::updateAOC();
__________________
Ivanhoe as is.. |
|
06.06.2011, 12:33 | #40 |
Участник
|
Цитата:
Сообщение от Ivanhoe
Странно, я использую такой код (см. ниже), проблем с открытием клиентов пока не было, хотя есть ощущение что формы не обновляются. DAX 2009 SP1 RU6.
X++: xSession::removeAOC(); SysTreeNode::refreshAll(); SysFlushDictionary::doFlush(); SysFlushAOD::doFlush(); xSession::updateAOC(); |
|
Теги |
aoc, ax2009, активные пользователи, законченный пример, кэш, полезное |
|
|