Bug 5744

Summary: 1Cv77 + Кнопка "Печать" в окне диалога печати
Product: WINE@Etersoft Reporter: Mikhail Krylatykh <delayer>
Component: Печать ; Диалог печатиAssignee: Денис Баранов <baraka>
Status: CLOSED FIXED QA Contact: Marat Sharipov <regan>
Severity: blocker    
Priority: P1 CC: d.yacenko, lav, mid, svzhu, vitperov
Version: 1.0.12Keywords: ИНТЕРРА
Target Milestone: ---   
Hardware: PC   
OS: Debian GNU/Linux   
Whiteboard:
Заявки RT: 18063, 18320 Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 443, 5991, 6947    
Attachments: промежуточное решение проблемы печати админ. установки
с CUPS'ом
без CUPS'a

Description Mikhail Krylatykh 2010-07-07 17:46:54 MSD
wine12-eter8/6, Debian Lenny, 1Cv77
Периодически (1-2 раза в день) при попытке распечатать любой документ и открытии она диалога печати оказывается неактивной кнопка "Печать". Если 1С перезапустить, печатать становится можно. Однако через некоторое количество документов проблема проявляется снова, и лечится аналогично. Не смертельно, конечно, но очень неприятно.
Comment 1 Денис Баранов 2010-07-07 20:06:46 MSD
(In reply to comment #0)
> wine12-eter8/6, Debian Lenny, 1Cv77
> Периодически (1-2 раза в день) при попытке
> ...
> смертельно, конечно, но очень неприятно.
> 
У вас установка административная или обычная?
Comment 2 Mikhail Krylatykh 2010-07-07 21:27:43 MSD
Административная
Comment 3 Денис Баранов 2010-07-08 16:31:30 MSD
(In reply to comment #2)
> Административная
> 

Попробуйте установить на файл C:\windows\win.ini права 777
Comment 4 Mikhail Krylatykh 2010-07-08 17:47:22 MSD
хорошо, понаблюдаю.
Comment 5 Денис Баранов 2010-07-12 19:09:22 MSD
(In reply to comment #4)
> хорошо, понаблюдаю.
> 

Ну как результаты?
Comment 6 Mikhail Krylatykh 2010-07-15 15:58:46 MSD
пока тихо, не звонят
Comment 7 Mikhail Krylatykh 2010-07-21 09:42:09 MSD
Не, осталась проблема. Также рандомно проявляется.
Comment 8 Mikhail Krylatykh 2010-07-28 23:37:59 MSD
какие то подвижки, идеи?
Comment 9 Денис Баранов 2010-08-11 10:58:27 MSD
(In reply to comment #8)
> какие то подвижки, идеи?
> 

Можно попробовать еще вариант занести всех пользователей в одну группу и поставить файл win.ini владельцем эту группу и разрешить изменение этой группе.
Comment 10 Mikhail Krylatykh 2010-08-11 12:18:44 MSD
Попробовать попробую, но разве это не те же яйца в профиль относильно chmod 777?
Comment 11 Денис Баранов 2010-08-11 13:15:55 MSD
(In reply to comment #10)
> Попробовать попробую, но разве это не те же
> яйца в профиль относильно chmod 777?
> 

По идее те же, но возможно что то и как то меняется по другому.
Comment 12 Mikhail Krylatykh 2010-08-31 12:32:15 MSD
печатать стали больше, проблема стала проявляться чаще. Предложенные выше действия не лечат. Надо что-то более действеннее. eter7-12
Comment 13 d.yacenko 2010-12-02 21:17:32 MSK
Created attachment 1998 [details]
промежуточное решение проблемы печати админ. установки
Comment 14 d.yacenko 2010-12-02 21:23:14 MSK
Comment on attachment 1998 [details]
промежуточное решение проблемы печати админ. установки

Конечно не забываем устанавливать в системе принтер по умолчанию....
Comment 15 Mikhail Krylatykh 2010-12-02 21:39:32 MSK
Мнения разделились, что называется ;)
Права пробовали, не помогло, попробуем бесправие.
Comment 16 Mikhail Krylatykh 2010-12-11 20:58:39 MSK
А, забыл отписать сразу. Попробовал бесправие - на следующий же день у всех вся печать встала. Вернул 777, ожило.
Comment 18 d.yacenko 2010-12-16 23:07:29 MSK
Странно, у нас уже месяц ни одной заявки. А шли каждые 20-30 минут.
Comment 19 Vitaly Lipatov 2010-12-17 13:57:03 MSK
(В ответ на comment #13)
> Created attachment 1998 [details]
> промежуточное решение проблемы печати админ. установки
Отсюда можно сделать вывод, что принтер пропадает, если в момент перестроения списка (при открытии диалога печати) с ним что-то не так. Каждый ли раз перестраивается список или только первый раз?

Возможно, так и стоит воспроизводить проблему:
1. Запустить 1С
2. Посмотреть через диалог на список принтеров
3. Остановить CUPS
4. Посмотреть на список (в хорошем случае ничего не должно измениться).

А вообще надо убрать использование win.ini, это глубокий атавизм.
Comment 20 Денис Баранов 2011-01-05 18:45:13 MSK
Проверь пожалуйста.
Не забывай что режим установки административный.
Comment 21 Максим Георгиевский 2011-01-11 18:35:30 MSK
Created attachment 2091 [details]
с CUPS'ом
Comment 22 Максим Георгиевский 2011-01-11 18:36:15 MSK
Created attachment 2092 [details]
без CUPS'a
Comment 23 Максим Георгиевский 2011-01-11 18:38:03 MSK
При запущенном CUPS список принтеров отображается корректно, если CUPS остановить, то изменяются названия устройств в списке, количество устройств не изменяется.
Также, все символы на русском в списке выводятся в неправильной кодировке.
В приложении win.ini с включенном cups и выключенным.
Comment 24 Vitaly Lipatov 2011-01-11 19:20:39 MSK
(В ответ на comment #23)
...
> Также, все символы на русском в списке выводятся в неправильной кодировке.
Про это отдельную багу со скриншотом.
Comment 25 Денис Баранов 2011-01-14 17:13:31 MSK
При запуске любой программы если очистить файл win.ini, то распечатать ничего невозможно.
Нужно убрать использование этого файла, т.к. вся информация есть в реестре.

Хотя с другой стороны этот файл нужен для совместимости с 16битными приложениями.
Comment 26 Vitaly Lipatov 2011-01-14 17:24:53 MSK
(В ответ на comment #25)
> При запуске любой программы если очистить файл win.ini, то распечатать ничего
...
> Хотя с другой стороны этот файл нужен для совместимости с 16битными
> приложениями.
При правильной архитектуре Wine — не нужен. Но если нужен, предлагаю отключать его использование при наличии определённой переменной.
Comment 27 Виталий Перов 2011-02-15 19:41:34 MSK
Нашёл упоминание файла win.ini в исходном коде. Используется он только в kernel32/profile.c.

Сомневаюсь, что надо удалять этот файл. Думаю лучше найти каким образом он используется при печати, и сделать так, чтобы работало без него
Comment 28 Виталий Перов 2011-02-17 13:06:33 MSK
Посмотрел места вызова функций из этого файла.
Нашёл, что GetProfileStringA используется в WINSPOOL_SetDefaultPrinter
Comment 29 Виталий Перов 2011-02-17 13:33:06 MSK
Еще GetProfileStringW вызывается из GetDefaultPrinterW.
Возможно проблема вызывается именно её поведением.

Сначала она ищет принтер по умолчанию в реестре, а уже затем в файле win.ini.
В реестре просматривается ветка HCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows
У ключа Device должно быть значение принтера по умолчанию.

Проверил на WinXP - оно там есть.
Проверил в wine eterhack - тоже есть
Проверил в wine на cellar - тоже есть.
Comment 30 Виталий Перов 2011-02-17 17:54:42 MSK
проверил в бутылке 1c77/1c77.
Даже без изменения win.ini, при нажатии на кнопку Ok диалога печати ничего не происходит.
В консоли:

err:commdlg:PRINTDLG_ChangePrinterA DocumentProperties fails on "CUPS-PDF"
fixme:commdlg:PRINTDLG_UpdatePrintDlgA No lpdm ptr?
fixme:commdlg:PRINTDLG_WMCommandA Update printdlg was not successful!
fixme:commdlg:PRINTDLG_UpdatePrintDlgA No lpdm ptr?

Сразу перед этим вызывается обсуждавшаяся выше функция GetDefaultPrinterW
Comment 31 Виталий Перов 2011-02-17 18:20:44 MSK
Рассмотрел поведение GetDefaultPrinterW.
Она читает данные именно из реестра.

Думаю проблема не в ней, и стоит рассмотреть функцию PRINTDLG_ChangePrinterA.
Проблема возникает в вызываемой ей DocumentPropertiesA.
Передаваемые параметры:
winspool:DocumentPropertiesA ((nil),(nil),CUPS-PDF,(nil),(nil),0)

Проследил дальнейший вызов функций. Результат (-1) возвращает функция GDI_CallExtDeviceMode16
Comment 32 Виталий Перов 2011-02-22 16:04:48 MSK
Происходит это потому, что проваливается вызов DRIVER_GetDriverName().

А вот она то как-раз и ищёт значение драйвера в win.ini. Обращения к реестру так и не происходит
Comment 33 Виталий Перов 2011-02-22 17:16:54 MSK
Добавил чтение из реестра. Проверил. Работает.
Теперь надо оформить патч, приложить к 1.0.12 и отправить в winehq
Comment 34 Виталий Перов 2011-02-22 17:53:12 MSK
Патч приложен в eterhack и в eter-1.0.12
Comment 35 Виталий Перов 2011-02-22 19:35:02 MSK
Отправил в WINEHQ, получил ответ о возможной утечке hKey.

Переделал патч. Отправил снова.

Попутно возник вопрос о правильности патча. По идее GDI_CallExtDeviceMode16 - 16-битная функция, которая не должна поддерживать работу с реестром.
Если патч не примут, то надо подумать как бы от неё отказаться совсем
Comment 36 Виталий Перов 2011-02-22 20:25:48 MSK
Решение есть в основных репозиториях. Багу закрываю.
Все комментарии по поводу отправки патча в WINEHQ будут вестись в отдельной баге #6947
Comment 37 Shestakov Dmitriy 2011-02-24 20:01:10 MSK
Так проблема с неактивной кнопкой печати решена или нет?
Сборку WINE@Etersoft с исправлениями уже доступна? Где ее взять?
Comment 38 Виталий Перов 2011-02-24 22:02:30 MSK
Проблема решена. По поводу сборок - вопросы к Денису
Comment 41 Marat Sharipov 2011-02-26 16:04:29 MSK
Wine 8/18
Принято.