29.09.2003, 14:57 | #1 |
Участник
|
Ошибка WinAPI::setFileTimeServer2Client(...) ?
Добрый день!
Создайте на сервере AOS файл, например d:\Test.txt Скопируйте его на клиента в c:\Test.txt PHP код:
В чем может быть ошибка? PS Axapta 3.0 SP1 (AOS Thin client)
__________________
Дмитрий Гришин |
|
29.09.2003, 18:15 | #2 |
Участник
|
Данное поведение стабильно проявляется только на одном клиенте. (см. рисунок ниже)
Опробовал подключение к разным AOS серверам. X++: static void Job2(Args _args) { #define.modified(2) ; print 'Файл на сервере: ', time2str(DVG_Common::getServerFileTime('d:\\Test.txt',#modified),1,1); print 'Файл на клиенте: ', time2str(WinAPI::getFileTimeEx('c:\\Test.txt',#modified),1,1); print 'Установим время с сервера: ', WinAPI::setFileTimeServer2Client('d:\\Test.txt','c:\\Test.txt'); print 'Файл на сервере: ', time2str(DVG_Common::getServerFileTime('d:\\Test.txt',#modified),1,1); print 'Файл на клиенте: ', time2str(WinAPI::getFileTimeEx('c:\\Test.txt',#modified),1,1); pause; } Пробовал на другом клиенте - там работает нормально. Не могу найти объяснение... Есть у кого-нибудь мысли на эту тему?
__________________
Дмитрий Гришин |
|
29.09.2003, 18:20 | #3 |
Участник
|
может я не совсем в тему.
Похоже вам нужно перетащить файл с сервера на клиента. Причем скорее всего, это какой-то нужный для работы клиента файл. Рекомендую посмотреть на класс SysFileDeployer и на семейство SysFileDeployment Они как раз занимаются этой задачей. Вызов этих классов выполняется из Info::Startup Немного о последовательности вызова при начале работы написано здесь http://axapta.mazzy.ru/hints/startupcmd/ |
|
29.09.2003, 18:23 | #4 |
Участник
|
да, самое главное забыл.
Обратите внимание как копируется файл в SysFileDeployment.copy() |
|
29.09.2003, 18:42 | #5 |
Участник
|
Цитата:
Изначально опубликовано mazzy
Похоже вам нужно перетащить файл с сервера на клиента. Файл перетаскивается без видимым проблем, а вот установить дату и время исходного файла в файл назначения не получается... или получается, но не на данном клиенте... Цитата:
Изначально опубликовано mazzy
Обратите внимание как копируется файл в SysFileDeployment.copy() Остается подозрение, что виновата машина клиента, но где и что подкрутить даже на ум не приходит... Возможно завтра придется снести клиента аксапты на этой машине и поставить заново... Второй день пытаюсь найти ответ, но безуспешно...
__________________
Дмитрий Гришин |
|
29.09.2003, 18:51 | #6 |
Участник
|
тогда не знаю
|
|
29.09.2003, 19:06 | #7 |
Участник
|
Переставил клиента Аксапты да данной машине - не помогло...
а ведь не факт что это ограничится только одной машиной...
__________________
Дмитрий Гришин |
|
30.09.2003, 09:04 | #8 |
NavAx
|
а может какой нить антивирусный или еще какой монитор файлик цепляет? Index service например.
ну чудеса ж... а их не бывает
__________________
И все они создания природы... |
|
30.09.2003, 10:50 | #9 |
Участник
|
Цитата:
Изначально опубликовано Lazy_Tiger
а может какой нить антивирусный или еще какой монитор файлик цепляет? Index service например. ну чудеса ж... а их не бывает
__________________
Дмитрий Гришин |
|
30.09.2003, 11:07 | #10 |
Участник
|
Попробовал присвоить времена одного локльного файла на машине клиента другому. Переписал WinAPI::setFileTimeServer2Client функцию в локальный job... С локальными файлами все работает нормально (см код и рисунок ниже)
X++: static void Job11(Args _args) { #winAPI #define.firstFile('c:\\test1.txt') #define.secondFile('c:\\test2.txt') #define.offset0(0) #define.offset4(4) #define.offset8(8) int hFile1, hFile2; Binary created_1, accessed_1, modified_1; Binary created_2 = new Binary(#Offset8); Binary accessed_2 = new Binary(#Offset8); Binary modified_2 = new Binary(#Offset8); ; print 'Время первого файла: ', time2str(WinAPI::getFileTimeEx(#firstFile,2),1,1); print 'Время второго файла: ', time2str(WinAPI::getFileTimeEx(#secondFile,2),1,1); hFile1 = WinAPI::createFile(#firstFile,#OPEN_EXISTING); if(hFile1) { created_1 = WinAPI::getFileTime(hFile1, 0); // createdServer = WinAPI::getFileTimeServer(serverhFile, 0); accessed_1 = WinAPI::getFileTime(hFile1, 1); // accessedServer = WinAPI::getFileTimeServer(serverhFile, 1); modified_1 = WinAPI::getFileTime(hFile1, 2); // modifiedServer = WinAPI::getFileTimeServer(serverhFile, 2); WinAPI::closeHandle(hFile1); if (created_1 && accessed_1 && modified_1) { created_2.dWord(#offset0, created_1.dWord(#offset0)); created_2.dWord(#offset4, created_1.dWord(#offset4)); accessed_2.dWord(#offset0, accessed_1.dWord(#offset0)); accessed_2.dWord(#offset4, accessed_1.dWord(#offset4)); modified_2.dWord(#offset0, modified_1.dWord(#offset0)); modified_2.dWord(#offset4, modified_1.dWord(#offset4)); hFile2 = WinAPI::createFile(#secondFile, #OPEN_EXISTING, #GENERIC_WRITE); if (hFile2) { print WinAPI::setFileTime(hFile2, created_2, accessed_2, modified_2); WinAPI::closeHandle(hFile2); } } } print 'Время первого файла: ', time2str(WinAPI::getFileTimeEx(#firstFile,2),1,1); print 'Время второго файла: ', time2str(WinAPI::getFileTimeEx(#secondFile,2),1,1); pause; } Выходит, что функция modifiedServer = WinAPI::getFileTimeServer(serverhFile, 2); возвращает неверное значение Есть мысли?
__________________
Дмитрий Гришин |
|
30.09.2003, 12:01 | #11 |
Участник
|
Так это проверить можно. Можно прям в setFileTimeServer2Client добавить:
PHP код:
|
|
30.09.2003, 12:41 | #12 |
Участник
|
Цитата:
Изначально опубликовано Джон
Так это проверить можно. Можно прям в setFileTimeServer2Client добавить: PHP код:
Цитата:
Изначально опубликовано Джон
А какой код у DVG_Common::getServerFileTime, если не секрет? PHP код:
PS В функции setFileTimeServer2Client есть такой код как: WinAPI::closeHandle(serverhfile); Так этот код не закрывает открытый файл на сервере... вот это точно ошибка... пришлось написать свой код и использовать его: PHP код:
__________________
Дмитрий Гришин |
|
30.09.2003, 14:23 | #13 |
Участник
|
Действительно, в трех-звенке почему то падает
А если по аналогии с DVG_Common::getServerFileTime вместо "глючной" WinAPI::getFileTimeServer написать свою функцию class1::getFileTimeServer PHP код:
PHP код:
|
|
30.09.2003, 14:42 | #14 |
Участник
|
Цитата:
Изначально опубликовано Джон
время одинаковым будет? Самое противное, что время создания файла проставляется правильно, а ведь это одна и та же функция работает... не понимаю...
__________________
Дмитрий Гришин |
|
30.09.2003, 16:24 | #15 |
Участник
|
Попробуй такой job запустить для файла с одинаковым временем created и modified:
PHP код:
|
|
01.10.2003, 11:41 | #16 |
Участник
|
Джон, пробовал, но безрезультатно...
Спасибо за участие... Я пошел другим путем... Ветка переросла в тему: "Установить время файла"
__________________
Дмитрий Гришин |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|