Рейтинг:1

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

флаг zw

У меня есть приложение MS Windows, которому нужна новая версия Wine. Я установил его локально в домашнюю папку с помощью PlayOnLinux.

Я застрял в создании простого сценария bash/dash/sh для запуска приложения .exe внутри своей папки. я пробовал стандартный pushd/popd, cd && exec, (компакт-диск && исполняемый файл) подход, но это не удалось.

Что мне нужно:

  • Desktop-файл как пусковая установка для скрипта

  • Скрипт, который:

    1. изменяет каталог на каталог приложения .exe
    2. выполняет вино .exe внутри каталога приложений

В настоящее время я доволен следующим Python-кодом для скрипта-оболочки (для размещения в /usr/local/bin/wine32-обертка):

#!/usr/bin/python3
импорт ОС
импорт системы
подпроцесс импорта

если len(sys.argv) >= 2:
    путь = sys.argv[1]
    wd = os.path.dirname(путь)
    exec_path = ["/home/{}/.PlayOnLinux/wine/linux-x86/6.15/bin/wine".format(os.getenv('USER'), путь), "{}".format(путь)]
    p = subprocess.run(exec_path, cwd=wd)
еще:
    print("\nИспользование {} с одним аргументом - полный путь к файлу.".format(sys.argv[0]));

и .desktop-файл (для размещения в ~/.local/доля/приложения/wine32.desktop), для этого:

#!/usr/bin/env xdg-open
[Вход на рабочий стол]
Версия=1.0
Тип = Приложение
Терминал=ложь
Icon=mate-panel-launcher
Exec=wine32-обертка %f
Имя=Местное вино32-6.15

затем я связываю свои exe-файлы с этим винным скриптом, используя Caja.

Можно ли заменить вышеприведенный скрипт python скриптом bash/dash/sh с точно такой же функциональностью?

jpbrain avatar
флаг ca
Привет Норберт. недостаточно поместить xdg-open в строку exec с %F?
N0rbert avatar
флаг zw
Спасибо, @jpbrain, этого недостаточно, так как приложение .exe считывает данные из своего каталога.
Рейтинг:1
флаг cn

Для записей рабочего стола есть Дорожка параметр доступен. Вот как выглядит лаунчер StarCraft II (созданный во время установки с помощью Wine):

[Вход на рабочий стол]
Имя=StarCraft 2
Exec=env WINEPREFIX="/home/spas/.wine" /opt/wine-staging/bin/wine C:\windows\command\start.exe /Unix /home/spas/ .wine/dosdevices/c:/users/Public/Desktop/StarCraft\ II.lnk
Тип = Приложение
Уведомление о запуске=истина
Комментарий=Играть в StarCraft II
Путь=/home/spas/.wine/dosdevices/c:/Program Files (x86)/StarCraft II
Значок=89A5_StarCraft II.0
StartupWMClass=starcraft ii.exe
N0rbert avatar
флаг zw
Проблема здесь в том, что «Путь» является динамическим. Я не могу предсказать, из какого каталога пользователь запустит .exe. Представьте ситуацию, когда .exe читает свой .ini (или БД, или какой-то ресурс) из того же каталога.
Рейтинг:1
флаг zw

После более глубокого анализа я нашел хорошие и интересные файлы рабочего стола для "Wine Windows Program Loader", которые пришли из пакетов Wine. Он имеет специальные опции в Исполнитель поле:

Exec=вино пуск/юникс %f

и принудительно запускает exe-файл в своем каталоге.

Для моего случая это может быть адаптировано для ~/.local/доля/приложения/wine32.desktop как показано ниже:

#!/usr/bin/env xdg-открыть
[Вход на рабочий стол]
Версия=1.0
Тип = Приложение
Терминал=ложь
Icon=mate-panel-launcher
Exec=/home/user/.PlayOnLinux/wine/linux-x86/6.15/bin/wine start /unix %f
Имя=Местное вино32-6.15

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

Примечание: когда Wine устанавливается из официальных репозиториев Ubuntu, такой «Wine Windows Program Loader» можно зарегистрировать с помощью таких команд, как mkdir -p ~/.local/share/applications/ && cp /usr/share/doc/wine-stable/examples/wine.desktop ~/.local/share/applications/ .

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.