Страница 1 из 1

DOS задачи глючат !

СообщениеДобавлено: 05 май 2006, 08:59
dogma
Не так давно (уже несколько лет) с переходом на четвертую версию нетвари (сейчас уже 6-ая) стали глючить дос-задачи. Сами они располагаются в сети, а юзера запускают их через ярлыки на рабочем столе.
Некорректная работа выражается в том, что приложение иногда запускается, иногда не запускается. На примере не работает сетевая функция получения сетевого имени пользователя (приложения в основном делались на Clipper), точнее выдает левое имя пользователя.
Еще пример, кто-то запустил программу, которая работает с таблицей a.dbf. , так же кто-то другой (пусть это будет юзер 'B') запускает приложение, которое тоже работает с данной таблицей, но уже в режиме запись. В результате у пользователя 'B' на экране выдается ошибка, что данный файл не найден или т.п., и соответственно далее работа с программой невозможна.

Может кто сталкивался с подобным?
Локально задачи работают нормально.

Re: DOS задачи глючат !

СообщениеДобавлено: 05 май 2006, 09:17
Dimerson
dogma писал(а):Не так давно (уже несколько лет) с переходом на четвертую версию нетвари (сейчас уже 6-ая) стали глючить дос-задачи. Сами они располагаются в сети, а юзера запускают их через ярлыки на рабочем столе.
Некорректная работа выражается в том, что приложение иногда запускается, иногда не запускается. На примере не работает сетевая функция получения сетевого имени пользователя (приложения в основном делались на Clipper), точнее выдает левое имя пользователя.
Еще пример, кто-то запустил программу, которая работает с таблицей a.dbf. , так же кто-то другой (пусть это будет юзер 'B') запускает приложение, которое тоже работает с данной таблицей, но уже в режиме запись. В результате у пользователя 'B' на экране выдается ошибка, что данный файл не найден или т.п., и соответственно далее работа с программой невозможна.

Может кто сталкивался с подобным?
Локально задачи работают нормально.


Обьясняю популярно про имя пользователя.
Если программеры юзают недокументированное Netware API в котором номер соединения пользователя передается в регистре 8 бит то это проблема программеров. У меня данная трабла вылезла тоже на 411 тогда когда номер коннекта стал зашкаливать 255 ...

Выходов 3.

1. Заставить юзать нормальное Netware API
2. Застрелиться
3. Замутит workaround. Я делал так.

Перед запуском древней дебильной проги вешается резидент. Он обрабатывает прерывание которое используется в NetWare 2.15 API.
Данный резидент в памяти < 1 Кб. Следом за ним пускается досовая прога немерянного размера [юзающая NW DOS API - размер изза того что используется NDS] которая корректно получает имя пользователя и передает резиденту. После завершения данной проги Дубовым фоксам клипперам и прочей ботве всегда возвращается номер коннекта ну к примеру 16 и правильное имя пользователя.

Вуаля.

Если есть желание позаниматься сексом с ассемблером и практически не документированным VLM ASM API то можно заставить резидента дергать VLM. Безо всяких внешних прог. Тут начинаюся дебри.
Я быстрее сделал вариант описанный выше. С VLM API помог Peter Vandrovec - аффтар ncpfs [так как на NT/2000/XP поддерживается только некое подмножество полного VLM API] - заработало и оно так же но я его джо ума не доводил ибо первый вариант гибче.

Про совместное использование баз - надо просто правильно писать проги. Оно в принципе живет. Кроме того можно использовать файловые транзакции NetWare.

Если прога написана корректно то в 100% случаев помогает
на сервере OPLOCK LEVEL1=OFF и OPLOCK LEVEL2=OFF.

Re: DOS задачи глючат !

СообщениеДобавлено: 05 май 2006, 13:05
Мещеряков Андрей
Dimerson писал(а): OPLOCK LEVEL1=OFF и OPLOCK LEVEL2=OFF.

Второе да. Но первое ??? :? Что-то не помню такого параметра...

Re: DOS задачи глючат !

СообщениеДобавлено: 05 май 2006, 15:50
Dimerson
Мещеряков Андрей писал(а):
Dimerson писал(а): OPLOCK LEVEL1=OFF и OPLOCK LEVEL2=OFF.

Второе да. Но первое ??? :? Что-то не помню такого параметра...


lol я же не говрю SET

если через SET это в NCP Client Side File Caching = OFF

Напишите софтинку на WIN32, которая зачитает нужную

СообщениеДобавлено: 05 май 2006, 21:31
Boris Morozov
инфу из дерева и запишет в файлик на машине юзера. А ваша основная прога ее зачитает. Проблема с размерностью очень трудноизлечима.

СообщениеДобавлено: 06 май 2006, 03:39
dogma
А можно по подробнее про резидент. Я не совсем въехал. По всей вдиимости резидент должен перехватывать вызовы досовской программы, далее делать запрос в NetWare, получать ответ и отправлять ей (Dos-программе) ответы (имя пользователся и т.п.).
ТАк ли?

СообщениеДобавлено: 06 май 2006, 04:44
Dimerson
dogma писал(а):А можно по подробнее про резидент. Я не совсем въехал. По всей вдиимости резидент должен перехватывать вызовы досовской программы, далее делать запрос в NetWare, получать ответ и отправлять ей (Dos-программе) ответы (имя пользователся и т.п.).
ТАк ли?


Практически так. То что TSR вернет программе это другое дело.
Но по крайненй мере не левое имя полученное из номера коннекшена обрезанного до 8 байт. Обращаться к NDS/Bindery за именем пользователя надо используя _документированное_ netware api во избежание проблем в ближайшем будущем [ну уж не юзать АПИ NetWare 2.15]

СообщениеДобавлено: 11 май 2006, 03:10
dogma
Для использования NetWare API нужен NovellClient, так? А как можно обойтись без него?

СообщениеДобавлено: 11 май 2006, 04:45
Dimerson
dogma писал(а):Для использования NetWare API нужен NovellClient, так? А как можно обойтись без него?
Можно даже обойтись без сервера ! :)

Если ваша прога единственное что хочет от сервера это получить имя ... так дайте ей эту возможность.