Запуск Каялы в Линуксе

  • 72 Просмотров
  • Последнее сообщение 11 апреля 2020
dreamer написал 24 марта 2020

Прекрасно осознаю, что кроме меня это вряд ли кому-то нужно, но за спрос не бьют, как говорится, так что пусть будет такая тема, подпишусь на неё, вдруг однажды кто-нибудь подскажет решение =)

Т.к. это .NET приложение, теоретически его можно запустить с помощью mono. И оно даже запускается, но выдаёт вот такую ошибку при попытке подключения к БД:

Пробовал в настройках менять "\" на "/" в путях к файлу БД и конфигу, менял тип БД, удалял и создавал новую... Результат тот же.

При нажатии "Отмена" программа закрывается и в консоль выкидывает ошибку (похоже что-то связанное со шрифтами), не знаю, имеет ли она отношение к проблеме или нет:

[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeInitializationException: The type initializer for 'Elegant.Ui.ScreenTipSkin' threw an exception. ---> System.ArgumentException: Name

Parameter name: Object was disposed.

  at System.Drawing.FontFamily.get_Name () [0x00021] in <b06ae2d65ae841c1aebc3e24f24a1414>:0

  at (wrapper remoting-invoke-with-check) System.Drawing.FontFamily.get_Name()

  at System.Drawing.Font.setProperties (System.Drawing.FontFamily family, System.Single emSize, System.Drawing.FontStyle style, System.Drawing.GraphicsUnit unit, System.Byte charSet, System.Boolean isVertical) [0x00000] in <b06ae2d65ae841c1aebc3e24f24a1414>:0

  at System.Drawing.Font..ctor (System.Drawing.Font prototype, System.Drawing.FontStyle newStyle) [0x00031] in <b06ae2d65ae841c1aebc3e24f24a1414>:0

  at (wrapper remoting-invoke-with-check) System.Drawing.Font..ctor(System.Drawing.Font,System.Drawing.FontStyle)

  at Elegant.Ui.ScreenTipSkin..cctor () [0x00005] in <dbb2d1d1524f4665bc0b5af621e0f762>:0

   --- End of inner exception stack trace ---

 

Сортировка: Стандарт | Новые | Голоса
Danil написал 24 марта 2020

К сожалению даже теоретически шансов нет. Разве что под вайном или что там сейчас модно в линуксе.

Причины такие. Моно так и не дотянул реализацию WinForms. В части интерфейса у нас целая куча вызовов винапи, как нашими руками, так и сторонними компонентами.

Есть небольшая надежда, что через год-два портируем гуй на авлонию, а всё остальное на то что сейчас называется .Net Core (скоро переименуют). И тогда оно заведется, но это теоретически

dreamer написал 24 марта 2020

Благодарю за ответ. NET Core кстати тоже пробовал, как раз ругалось на WinForms:

$ dotnet ./Kayala.Start.exe

Unhandled exception. System.IO.FileNotFoundException: Could not load file or assembly 'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b

77a5c561934e089'. The system cannot find the file specified.

понял что бессмысленно, думал хоть с mono есть шанс. Ну нет так нет, будем ждать

А от вайна толку нет, библиотек на гигабайт тянет, а всё равно использует mono для запуска таких приложений.

Остаётся только виртуалка с виндой.

dreamer написал 24 марта 2020

Ладно, насчёт вайна я погорячился. Заработало! Нужно было просто установить .NET Framework 4.5.

Установил wine-staging (v5.4) и создал отдельный 32-битный конфиг для каялы.

$ export WINEARCH="win32"

$ export WINEPREFIX=~/.wine-kayala

$ wineboot -u

$ winetricks dotnet45

$ wine ./Kayala.Start.x86.exe

Но скорость работы и стабильность оставляют желать лучшего:

Danil написал 24 марта 2020

Ну почти

Скорость работы совсем печаль? Падает случайным образом или есть последовательность?

dreamer написал 24 марта 2020

Выяснил - программа падает при нажатии кнопки Alt. Просто одиночном нажатии, а также при сочетаниях с её использованием (например Alt-Tab, для переключения на другое окно). Крашится и выдаёт эту ошибку:

Unhandled Exception: System.ArgumentException: Parameter is not valid.

   at System.Drawing.Bitmap..ctor(Int32 width, Int32 height, PixelFormat format)

   at System.Drawing.Bitmap..ctor(Int32 width, Int32 height)

   at Elegant.Ui.KeyTipForm.Clear()

   at Elegant.Ui.KeyTipForm.Hide()

   at Elegant.Ui.KeyTipEngine.Activate(Boolean activate, Int32 keyCode)

   at Elegant.Ui.KeyTipEngine.Elegant.Ui.IInputSpyMouseListener.OnInputSpyMouseDown(InputSpyMouseEventArgs e)

   at Elegant.Ui.InputSpy.NotifyAboutMouseDownEvent(IInputSpyMouseListener[] listeners, MouseButtons buttons, Int32 x, Int32 y, IntPtr hwnd)

   at Elegant.Ui.InputSpy.MouseHookProc(Int32 nCode, IntPtr wParam, IntPtr lParam)

   at System.Windows.Forms.SafeNativeMethods.MessageBox(HandleRef hWnd, String text, String caption, Int32 type)

   at System.Windows.Forms.MessageBox.ShowCore(IWin32Window owner, String text, String caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefau

ltButton defaultButton, MessageBoxOptions options, Boolean showHelp)

   at Kayala.Start.Program.Main()

   at Kayala.Start.x86.Program.Main()

Ещё, если свернуть и развернуть окно, либо переключиться на другой рабочий стол и обратно, интерфейс в окне с Каялой перерисовывается с задержкой в секунду-две. При том что в целом программа работает шустрее, чем в виртуалке на этом же компьютере.

Danil написал 25 марта 2020

Выяснил - программа падает при нажатии кнопки Alt. Просто одиночном нажатии, а также при сочетаниях с её использованием (например Alt-Tab, для переключения на другое окно). Крашится и выдаёт эту ошибку:

Это риббон пытается подсказки нарисовать. В следующем обновлении попробую его уговорить этого не делать.

Ещё, если свернуть и развернуть окно, либо переключиться на другой рабочий стол и обратно, интерфейс в окне с Каялой перерисовывается с задержкой в секунду-две.

А если обновленный вариант версии 1.9 попробовать. То же самое будет?

dreamer написал 25 марта 2020

Да, в новой всё то же самое. Собственно, задержка отрисовки не очень бесит, а вот альтом часто пользуюсь, если пофиксите, будет прекрасно, можно будет уйти от виртуалки.

Что интересно, если сделать вот так (оставить открытым окно "О программе"):

открыть окно

то исчезают сразу оба замеченных мной глюка. Моментальная отрисовка при сворачивании/разворачивании и при переключении рабочих столов, и кнопка Alt уже не роняет приложение.

Кстати, обновление произвожу путём перезаписи старого дистрибутива файлами из нового, а не так как указано в инструкции. Потому что если делать как по инструкции (оставить из старой только Server.setting и БД), то при запуске не отрисовывается большинство картинок на кнопках и почти ничего не открывается. Такое же поведение если открыть чистую версию. Поэтому для тех кто хочет запустить программу в вайне, нужно предварительно запустить её (выполнить вход с подключением к БД) в windows. Не знаю почему так происходит, но вдруг полезно будет кому-то.

Danil написал 25 марта 2020

Потому что если делать как по инструкции (оставить из старой только Server.setting и БД), то при запуске не отрисовывается большинство картинок на кнопках и почти ничего не открывается. Такое же поведение если открыть чистую версию.

А можно скрин этого безобразия?

dreamer написал 25 марта 2020

Товары, документы и РМК не открываются. Открываются только журналы и продажи (но в продажах невозможно получить отчёт, выдаёт ошибку как на втором скрине)

И в консоли полно ошибок типа:

0009:fixme:path:parse_url failed to parse L"Kayala.UI.WinForms.Controls.resources"

0009:fixme:ole:Context_QueryInterface interface not implemented {51372ae0-cae7-11cf-be81-00aa00a2fa25}

Danil написал 26 марта 2020

Это под вайном такое происходит, так? А если под виндовс запустить свежескачанный портабл? То же самое происходит?

dreamer написал 26 марта 2020

В виндовсе всё в порядке, речь только о вайне и только о свежем запуске (либо чистом обновлении) под ним. Видимо при первом запуске чё-то там генерируется, какие-нибудь ресурсы (вам виднее)), что wine не осиливает. В принципе, не критично.

dreamer написал 10 апреля 2020

Хотел спросить, как происходит привязка лицензии к ПК? Как я понял, генерируется уникальный "идентификатор компьютера". Что обычно влияет на его изменение, смена материнской платы?

У меня на одном и том же ПК программа, запущенная в wine, и программа, запущенная в virtualbox, показывают разные идентификаторы. Если я обновлю wine (или его конфигурацию) или ядро/библиотеки linux - идентификатор не поменяется? Если я переустановлю windows в виртуалке или пересоздам виртуалку или обновлю virtualbox - идентификатор не поменяется?

Просто хочу знать где у меня меньше шансов потерять лицензию

И раз уж речь зашла за лицензию, сразу спрошу, на allsoft она идёт как "Каяла: Торговое место 1.8", на 1.9 активируется без проблем? Лицензия одна универсальная и поддерживет как host-версию так и классическую (можно переключаться между ними используя одну и ту же лицензию)?

Danil написал 11 апреля 2020

Хотел спросить, как происходит привязка лицензии к ПК? Как я понял, генерируется уникальный "идентификатор компьютера". Что обычно влияет на его изменение, смена материнской платы?

Процессор и материнская плата

 У меня на одном и том же ПК программа, запущенная в wine, и программа, запущенная в virtualbox, показывают разные идентификаторы. Если я обновлю wine (или его конфигурацию) или ядро/библиотеки linux - идентификатор не поменяется? Если я переустановлю windows в виртуалке или пересоздам виртуалку или обновлю virtualbox - идентификатор не поменяется?

Сложно сказать. Я бы предложил использовать виртуалбокс и не пересоздавать виртуалку. Там по крайней мере будет работать настоящая виндовс. Тем более что с наскока заглушить клавижу альт не получилось. Переустановка виндовс в виртуалке не должна принести проблем.

И раз уж речь зашла за лицензию, сразу спрошу, на allsoft она идёт как "Каяла: Торговое место 1.8", на 1.9 активируется без проблем?

Да и на всех последующих версиях тоже.

Лицензия одна универсальная и поддерживет как host-версию так и классическую (можно переключаться между ними используя одну и ту же лицензию)?

Нет, на хост будет отдельная лицензия. Она позволит использовать классический вариант, но не наоборот. У хоста клиенты не лицензируются, поэтому это фактически бесконечная по количеству рабочих мест лицензия. Будет так же классическая лицензия с возможность переноса между компьютерами.

dreamer написал 11 апреля 2020

Нет, на хост будет отдельная лицензия. Она позволит использовать классический вариант, но не наоборот. У хоста клиенты не лицензируются, поэтому это фактически бесконечная по количеству рабочих мест лицензия.

То есть она будет дороже? Дороже двух классических лицензий?

Будет так же классическая лицензия с возможность переноса между компьютерами.

Это было бы полезно! Как раз на случай смены идентификатора по каким-либо причинам (сгорела материнка, накрылся диск с виртуалкой), лицензия есть бессрочная, а техника нет. Но за эту возможность тоже, как я понимаю, нужно будет доплатить?

 

Danil написал 11 апреля 2020

То есть она будет дороже? Дороже двух классических лицензий?

Да, будет дороже. Предварительно её стоимость будет 10 000 руб. Но как я уже писал если решите её погонять по всякому сделаем скидку. Тут стоит добавить, что для хоста лицензия пока не будет переносимой.

Но за эту возможность тоже, как я понимаю, нужно будет доплатить?

Предварительно её стоимость будет 5000 руб.

  • Понравилось
  • dreamer
Close