Bug 3895

Summary: [interra]: Штрих ФР-К + Настройка свойств
Product: WINE@Etersoft Reporter: Mikhail Krylatykh <delayer>
Component: Оборудование ; ДрайвераAssignee: Александр Морозов <amorozov>
Status: CLOSED FIXED QA Contact:
Severity: critical    
Priority: P4 CC: amorozov, baraka, DjSpiker, kondratyuk
Version: 1.0.10Keywords: ИНТЕРРА
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 3589    

Description Mikhail Krylatykh 2009-04-30 16:27:14 MSD
WINE@Etersoft 1.0 Local 1.0.10-eter20/14
kUb-8.04
Устанавливаем драйверы Штрих ФР-К для работы с одноименным фискальником. Установка проходит без ошибок, однако, запустив тест драйвера (DrvFRTst.exe) нажатие на Настройку свойств (дабы отыскать, на каком COM-порту находится фискальный регистратор) не открывает соответствующее окно. В консоли в это время:
fixme:ole:OleCreatePropertyFrame (0x1002c,16,16,(null),1,0x37d8c0,1,0x13b848,419,0,(nil)), not implemented (olepro32.dll)
Игры через winecfg с параметрами библиотеки olepro32.dll (втроенная, сторонняя) результата не дали. На 1,0,9-network (другая машинка) не воспроизводится, окно появляется, тест проходит, девайс находится на ожидаемом СОМе.
Comment 1 Mikhail Krylatykh 2009-04-30 16:31:28 MSD
Да, при попытке просто "занять/освободить порт" в консоль сыпется:
fixme:comm:set_queue_size insize 1024 outsize 1024 unimplemented stub
И ФР так и не видится, хотя номер порта указан верно.
пользователь, от имени которого происходит работа, есть в dialout/uucp. Права на /dev/ttyS*:
interra@shop2:~$ ls -l /dev/ttyS*
crw-rw---- 1 root dialout 4, 64 2009-04-30 16:27 /dev/ttyS0
crw-rw---- 1 root dialout 4, 65 2009-04-30 19:26 /dev/ttyS1
crw-rw---- 1 root dialout 4, 66 2009-04-30 19:26 /dev/ttyS2
crw-rw---- 1 root dialout 4, 67 2009-04-30 19:26 /dev/ttyS3
Comment 2 Александр Морозов 2009-04-30 18:00:21 MSD
При запуске
wine98 program.exe
тоже не работает?
Comment 3 Константин Кондратюк 2009-05-11 17:37:39 MSD
Нужно проверить, из-за wine98 ли такая регрессия или сама по себе. В случае успешного запуска с помощью wine98 можно будет прописать DrvFRTst.exe и подобные утилиты в замещения.
Comment 4 Денис Баранов 2009-05-11 19:06:48 MSD
(In reply to comment #2)
> При запуске
> wine98 program.exe
> тоже не работает?

Через wine98 без проблем работает. Думаю лучше прописать вызов через wine98 таких программ, чем чинить все с нуля.
Comment 5 Mikhail Krylatykh 2009-05-12 10:13:36 MSD
Не соглашусь, что совсем без проблем...
Да, запускается, и если компорт указать корректный, то Штрих-ФР-К я вижу.
Однако поиск оборудования вешается, то есть нажатие кнопки Поиск дает затемнение кнопки, вроде как ищет... но на этом все и заканчивается, искать может годами ;) При этом кнопа Закрыть работает, и окошко по ней закрывается нормально.
Вывод при запуске в консоли присутствует такой:

err:service:RPC_Init RpcServerListen failed with error 1714
err:wineboot:start_services_process Unexpected termination of services.exe - exit code 1714
Comment 6 Mikhail Krylatykh 2009-05-20 12:50:09 MSD
eter23-16, воспроизводится
Comment 7 Александр Морозов 2009-06-23 19:14:54 MSD
При поиске оборудования на текущем eterhack не происходит обращения к COM-портам. Это видно по логам +comm,+file.
Comment 8 Александр Морозов 2009-06-24 14:41:40 MSD
При запуске в одной и той же .wine на atlant поиск не работает, а на cellar работает. Запускал через
WINEDLLOVERRIDES="oleaut32=n,b" ww DrvFRTst.exe
На cellar просто заходил через
ssh -Y cellar
Comment 9 Александр Морозов 2009-06-24 16:26:18 MSD
Если запустить программу под отладчиком, установить брейк на 0x40004a60 (функцию потока, создающегося при нажатии на "Начать поиск") и выйти из отладчика при первом появлении исключения, то поиск оборудования выполняется и на atlant. Правда, при закрытии окошка поиска всё падает.
Comment 10 Александр Морозов 2009-06-24 18:24:32 MSD
Выполнение функции, расположенной по адресу 0x40004a60 на cellar:
0050:Starting thread proc 0x40004a60 (arg=0xa7f400)
0050:Call ole32.CoInitialize(00000000) ret=00b68612
............
На atlant:
0031:Starting thread proc 0x40004a60 (arg=0xa8f400)
0031:Call KERNEL32.ExitThread(00000000) ret=40004ae2
Comment 11 Александр Морозов 2009-06-25 15:04:43 MSD
DrvFR.dll:
CODE:00058024                 push    ebp
CODE:00058025                 mov     ebp, esp
CODE:00058027                 push    ecx
CODE:00058028                 push    ebx
CODE:00058029                 mov     [ebp+var_4], eax
CODE:0005802C                 mov     eax, [ebp+var_4]
CODE:0005802F                 cmp     word ptr [eax+32h], 0
CODE:00058034                 jz      short loc_58042
CODE:00058036                 mov     ebx, [ebp+var_4]

Если в отладчике установить брейк на 00058024, то поиск оборудования начинает работать, а если на 0005802F - нет. При этом содержимое регистров перед выполнением 0005802F в обоих случаях одинаково. Возможно, баг связан с многопоточностью, например, на одной машине раньше начинает выполняться один поток, а на другой - другой.
Comment 12 Александр Морозов 2009-06-25 16:08:21 MSD
Баг не проявляется, если добавить задержку в start_thread().
Comment 13 Денис Баранов 2009-07-16 21:02:43 MSD
Принято.
WINE@Etersoft 1.0.10 eter27/eter19

Работает при запуске через wine98