Bug 2023

Summary: Сообщения об ошибках в графику
Product: WINE@Etersoft Reporter: Vitaly Lipatov <lav>
Component: Интеграция в хост-системуAssignee: Илья Шпигорь <shpigor>
Status: CLOSED FIXED QA Contact:
Severity: minor    
Priority: P4 CC: amorozov, baraka, kondratyuk, shpigor, vostok
Version: 1.0.11   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on: 4260    
Bug Blocks: 1982, 4284    
Attachments: Попытка добавления MessageBox

Description Vitaly Lipatov 2008-06-29 03:31:19 MSD
Если запускаем с неподдерживаемого диска (не из dosdevices), выдавалось графическое сообщение об этом.

1. Можно написать утилиту, которая будет выводить MessageBox со строками
из передаваемых параметров, и эту утилиту запускать из скрипта.
2. Я пытался дополнить консольное сообщение __wine_kernel_init подгрузкой user32 и  вызывовм MessageBox, но пока не получилось (попытка в вложении).
Comment 1 Vitaly Lipatov 2008-06-29 04:13:06 MSD
Created attachment 524 [details]
Попытка добавления MessageBox

В этом месте user32.dll не подгружается. Возможно, что единственное решение - внешняя программа.
Comment 2 Konstantin Podrubny 2008-07-15 16:32:36 MSD
Просто так подгрузить GUI к консольке, похоже, невозможно.
Имеет смысл писать утилиту. только стоит определиться с функциональностью - это будет узкоспециализированный хак для местного пользования или нечто большее?
Comment 3 Анатолий Лютин 2008-08-05 11:58:29 MSD
(In reply to comment #1)
> Created an attachment (id=524) [details]
> Попытка добавления MessageBox
> 
> В этом месте user32.dll не подгружается.
> Возможно, что единственное решение -
> внешняя программа.
> 

Может быть, если уже подгрузился kernel32.dll, подгрузить user32.dll с помощью LoadLibraryA , а затем его выгрузить..

Второй вариант - использовать для GUI функции winex11.drv
Comment 4 Анатолий Лютин 2008-08-05 12:00:54 MSD
(In reply to comment #3)
 
> Второй вариант - использовать для GUI
> функции winex11.drv
> 
Ошибся - навряд ли сработает, т.к. грузится после user32.dll и юзает его функции.
Comment 5 Vitaly Lipatov 2008-08-05 12:05:47 MSD
(In reply to comment #2)
> Просто так подгрузить GUI к консольке,
> похоже, невозможно.
> Имеет смысл писать утилиту. только стоит
> определиться с функциональностью - это
> будет узкоспециализированный хак для
> местного пользования или нечто большее?
Я думал о программе, которая будет выводить через MessageBox передаваемые ей аргументы, с тем исключением, что форматная строка (собственно текст сообщения) будет браться из ресурсов программы по передаваемому коду (чтобы была возможность перевода сообщений на другие языки.
Надо просто попробовать.
Comment 6 Konstantin Podrubny 2008-08-06 15:56:58 MSD
может быть стоит написать dll предоставляющую интерфейс для вывода любых сообщений (заранее собранных в некотором ресурсе и выбираемых по передаваемому коду ошибки/сообщения) в GDI, чтобы его можно было использовать не только для вызова из консоли посредством скрипта, но и использовать в "нормальных" приложениях. а для скрипта написать миниатюрное приложение, которое используя передаваемые ей скриптом аргументы будет лишь вызывать диалог из dll-ки, а весь функционал будет заложен в dll.
к тому же для того чтобы можно было использовать одни и те же коды ошибок для разных модулей (соответственно разные сообщения) или с разными языками, можно ресурсы (таблицы строк) прикручивать к разным dll, и явно загружать нужную выбирая по имени модуля, откуда идет вызов диалога. 

т.е. если вызов откуда-нибудь из-вне приеделов вайн, схема такая:
 модуль -> скрипт -> миниприложение (находящееся где-нить в /dosdevices) -> dll-ка с диалогом + dll-ка с нужными строками

если из "нормального" вайносвского приложения, схема такая:
 модуль -> dll-ка с диалогом + dll-ка с нужными строками
Comment 7 Vitaly Lipatov 2008-08-06 16:41:20 MSD
(In reply to comment #6)
> может быть стоит написать dll
> предоставляющую интерфейс для вывода
> любых сообщений (заранее собранных в
> некотором ресурсе и выбираемых по
> передаваемому коду ошибки/сообщения) в GDI,
> чтобы его можно было использовать не
> только для вызова из консоли посредством
> скрипта, но и использовать в "нормальных"
Про скрипт это была начальная условность. На самом деле нужно
просто иметь возможность вызывать эту программу оттуда, где нет доступа к графике, но есть возможность выполнить программу.
То есть для скрипта уже не нужно.

> к тому же для того чтобы можно было
> использовать одни и те же коды ошибок для
> разных модулей (соответственно разные
> сообщения) или с разными языками, можно
> ресурсы (таблицы строк) прикручивать к
> разным dll, и явно загружать нужную выбирая
> по имени модуля, откуда идет вызов диалога. 
Ну это развитие...
 
> т.е. если вызов откуда-нибудь из-вне
> приеделов вайн, схема такая:
>  модуль -> скрипт -> миниприложение
> (находящееся где-нить в /dosdevices) -> dll-ка с
> диалогом + dll-ка с нужными строками
Ну идея хорошая, просто я сбил своим упоминанием скрипта.
 
> если из "нормального" вайносвского
> приложения, схема такая:
>  модуль -> dll-ка с диалогом + dll-ка с нужными
> строками
Ну вроде как в таком случае можно и из программы вызвать MessageBox, и ничего дополнительно не требуется.


Да, программу будем делать отдельно и в закрытую часть.
Сейчас 4 кандидата в сообщения:
- Нет такой программы
- Запуск не с диска Wine
- Работа с сетевого ресурса без модуля CIFS от Etersoft
- Превышено ограничение на количество пользователей (4) для версии Network Lite
Comment 8 Илья Шпигорь 2009-03-04 15:18:46 MSK
*** Bug 3593 has been marked as a duplicate of this bug. ***
Comment 9 Илья Шпигорь 2009-03-04 15:23:47 MSK
Патч на багу #3593 есть рассылке. Он выводит сообщения в случаях:

- Нет такой программы
- Запуск не с диска Wine

Нужна проверка на случаи:

- Работа с сетевого ресурса без модуля CIFS от
Etersoft
- Превышено ограничение на количество
пользователей (4) для версии Network Lite

Это должна определять закрытая часть?
Comment 10 Vitaly Lipatov 2009-08-02 14:13:27 MSD
Так как мы решили, писать на чистых Иксах программу, выводящую сообщение?

Судя по всему, надо использовать нечто типа Xdialog / zenity / gdialog, но не напрямую, а через обвязку на shell, сваливаясь на xmessage, если не найдено ничего.

Потому что задача частая - выводить сообщение. Осталось решить, что делать с локализацией.
Comment 11 Александр Морозов 2009-08-03 12:51:10 MSD
(In reply to comment #10)
> Так как мы решили, писать на чистых Иксах
> программу, выводящую сообщение?

В случае запуска на неизвестном wine диске подойдёт и etermsg.
Comment 12 Vitaly Lipatov 2009-10-17 18:33:43 MSD
Разработали программу eterx11msg в рамках 4260. Является аналогом xmessage, по сути.