LINUX.ORG.RU
решено ФорумTalks

Автоматизация вендовых GUI-приложений в Wine

 , ,


1

2

Имеется вендовое GUI-приложение с кнопками и диалоговыми окнами. Насколько я понимаю, оно написано на обычном Win32, но я не уверен (кстати, как это проверить?). Приложение вендовое по сути и философии, то есть каких-либо ключей командной строки там нет и не предвидится.

Требуется автоматизировать это приложение. То есть сделать что-то, способное запускать его, прокликивать по нужным кнопкам, ждать появления заданного текста в TextBox и потом закрывать приложение. Ситуация потенциально осложняется тем, что одна из этих кнопок открывает диалоговое окно выбора файла и его тоже нужно автоматизировать (стандартный вендовый диалог; путь до файла, к счастью, известен).


Знает ли ЛОРовский хайвмайнд какой-либо способ это сделать? Куда копать?

Линукс тут при том, что вундервафля будет запускаться на безголовом линуксовом сервере в Wine. (Само приложение совместимо с Wine и отлично в нём работает.)

★★★★★

Последнее исправление: intelfx (всего исправлений: 2)

Я не уверен, насколько это оффтопик. Перенесите в Desktop, если так будет правильнее.

intelfx ★★★★★
() автор топика

Ты как всегда слишком узко смотришь. Зачем запускать виндовое приложение? Оно ходит куда-то сохраняет данные? Возможно имеет смысл просто открывать базу данных или кидать нужные запросы куда-нибудь?

fjfalcon ★★★
()

AutoIt, он живой еще. Я на нем десктоп приложения тестировал. А тесты запускал через WinEXE, который использует IPC и принимает вызовы с удаленной линукс машины. Правда этот хак прикрыли после WinXP и заменами я не интересовался.

Lordwind ★★★★★
()

Делал подобное на autohotkey, правда в винде.

goingUp ★★★★★
()

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

einhander ★★★★★
()
Ответ на: комментарий от fjfalcon

Зачем запускать виндовое приложение?

Потому что мне нужно автоматизировать работу с файлами в проприетарном формате этой программы.

Чтобы не быть голословным: речь о Macrium Reflect (виндовая бэкапилка) и конкретно об утилите consolidate.exe из комплекта поставки этой программы, которая занимается тем, что «склеивает» инкрементальные бэкапы.

Ты как всегда слишком узко смотришь.

Ну да, конечно, узко смотрю. Жду встречных предложений.

intelfx ★★★★★
() автор топика
Последнее исправление: intelfx (всего исправлений: 3)
Ответ на: комментарий от einhander

Нет, никакой поддержки командной строки там нет, иначе бы вопроса не стояло. Добавил в ОП.

intelfx ★★★★★
() автор топика

TestComplete

но это проприетарщина

Harald ★★★★★
()

Будь мужиком — пропатчи саму программу.

sudopacman ★★★★★
()

Как идеальный, но сложный вариант - реализовать минимальную симуляцию user32/gdi32 которая будет иммитировать нажатие нужных кнопок

mittorn ★★★★★
()
Ответ на: комментарий от mittorn

Да, я думал об этом. Но тогда уж проще отреверсить и запатчить саму прогу (она небольшая). Как «совсем запасной» вариант сойдёт.

intelfx ★★★★★
() автор топика
Последнее исправление: intelfx (всего исправлений: 2)

Касательно оожидания появления текста - есть виндовая консольная утилита cmdow, возможно через неё удастся найти поле с текстом
либо же патчить библиотеки wine чтобы выврдил оный текст в лог.
так же могут быть полезны декомпиляторы вроде ghidra/ida, чтобы понять что именно там искать

mittorn ★★★★★
()
Ответ на: комментарий от intelfx

Можно запатчить прогу чтобы искала другие функции в библиотеках простым sed'ом
так перехватить выставление/вывод текста

mittorn ★★★★★
()
Ответ на: комментарий от intelfx

Что там за textbox? Можно ли выделить текст и скопировать? Если да, то вариант с xdotool+xclip вполне рабочий.

ashot ★★★★
()
Ответ на: комментарий от intelfx

может не с того конца решаешь? Не, если надо конкретно эту вундервафлю то флаг в руки, а так бэкапилок на винду пруд пруди, да хоть виндовый robocopy

Morin ★★★★
()
Ответ на: комментарий от Morin

Надо конкретно эту вундервафлю, вменяемых аналогов с нужными фичами у неё не очень-то и есть. Уже искал.

intelfx ★★★★★
() автор топика
Последнее исправление: intelfx (всего исправлений: 1)

Сначала нужно определиться, оно x32 или x64.
Если x64, то хз.
Если x32, то всё просто:
https://pbpython.com/windows-com.html
- естественно, с виндовым питоном. И я не уверен, но с 2.7 вроде это лучше работает - сам делал только под оффтопиком с 2.7
Как я понимаю, нужно всё запускать из одного wine - SO пишут, работает:
https://stackoverflow.com/questions/6847684/automating-excel-with-win32com-on...

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 1)
Ответ на: комментарий от LamerOk

Не смотря на красивый сайт

GPL

Лол. Линуксоиды так привыкли к убогим сайтам из начала нулевых, что боятся красивых сайтов.

LikeABoss
()

есть вещи в линуксе, такие как gimp и wine, с которыми связываться себе дороже.:( я бы использовал полноценную виртуалку, а внутри бы отлично работала утилита по автоматизации. там они совершенно полноценные. и даже одна или две. какую конкретно я использовал, уже не помню.

crypt ★★★★★
()

Была такая штука Sikuli. Кажись загнулось.

Хотя если вспомнить про местного Рината с «софт не разлагается, а рукописи не горят», то может что-то и можно получить. Но такое себе…

fornlr ★★★★★
()
Последнее исправление: fornlr (всего исправлений: 2)
Ответ на: комментарий от crypt

Я не могу использовать виртуалку, потому что оверхед по I/O любым доступным способом будет большой. Эта прога много и долго пишет на диск.

intelfx ★★★★★
() автор топика
Ответ на: комментарий от intelfx

я бы изучил вопрос с оптимизацией IO. ты и без меня знаешь, что RH на KVM добилась очень неплохих результатов при использовании спец.драйверов. у wine тоже накладные по IO. короче, [я] провел бы тест сначала.

crypt ★★★★★
()
Последнее исправление: crypt (всего исправлений: 1)
Ответ на: комментарий от intelfx

плюс, если прога будет работать долго, я бы вообще от вайн отказался. обвалится по неизвестным причинам через 8 часов работы. нафиг надо.

crypt ★★★★★
()
Ответ на: комментарий от crypt

Разве что если ты говоришь про virtiofs, но я слышал, что оно ещё очень сырое.

Нормальный (сравнительно) высокопроизводительный I/O в виртуалке сейчас только через virtio-scsi, но мне нужно работать с файловой системой, а не с блочными устройствами.

Или есть другие варианты, которых я не вижу?

intelfx ★★★★★
() автор топика
Последнее исправление: intelfx (всего исправлений: 1)

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

zgen ★★★★★
()
Последнее исправление: zgen (всего исправлений: 1)
Ответ на: комментарий от intelfx

this, никаких новых сведений о драйверах у меня нет. конкретную задачу, нагрузку и железо я не представляю, так что тем более вариантов не вижу. можно выделить физический девайс под создание блочного девайса, а уже изнутри vm (т.е. экспортировать средствами guest и import on host) его отдать как ФС основной системе.

crypt ★★★★★
()
Последнее исправление: crypt (всего исправлений: 1)
Ответ на: комментарий от takino

От поля зависит. Если его можно выделить мышью и скопировать, то почему нет?
Проверить сейчас не могу.

ashot ★★★★
()
Ответ на: комментарий от zgen

тебя в гугле забанили

Да. Хотел поинтересоваться опытом реальных людей, особенно применительно к Wine.

intelfx ★★★★★
() автор топика
Ответ на: комментарий от crypt

можно выделить физический девайс под создание блочного девайса, а уже изнутри vm (т.е. экспортировать средствами guest и import on host) его отдать как ФС основной системе.

Ну блин. Мне же не в вакууме нужно прогу запускать, а работать с какими-то реальными данными. Реальные данные уже есть, они лежат на массиве btrfs-ном, туда по SMB пишут другие машины.

intelfx ★★★★★
() автор топика
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от intelfx

про wine не могу сказать, такого опыта не было

zgen ★★★★★
()
Ответ на: комментарий от intelfx

это в любом случае секс в гамаке. без смены самой ситуации ты нормально не вставишь.

туда по SMB пишут другие машины.

по логике вещей очевидно, что писать нужно сразу по SMB на виндовый сервер, где прога будет нативно работать с максимальной отдачей. btrfs и линукс тут нафиг, имхо, не нужны. а если нужны, то проще им как-то потом обеспечить доступ.

crypt ★★★★★
()
Последнее исправление: crypt (всего исправлений: 2)
Ответ на: комментарий от crypt

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

Сейчас виндовые машины сами лезут на сервер по SMB сжимать свои бэкапы, но это работает как говно.

intelfx ★★★★★
() автор топика

Есть фреймворк а-ля селениум для тестирования гуи приложений Squish. Он умеет управлять виндовыми приложениями. Но он платный.

cocucka ★★★★☆
()

Программа может регистрировать COM объекты при установке. Тогда ставишь PowerShell и вперед!

leonidko ★★★★
()
Ответ на: комментарий от intelfx

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

crypt ★★★★★
()
Последнее исправление: crypt (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.