Эта ссылка: https: //unix.stackexchange. com / questions / 509360
Здесь объясняется, как добавить программу в меню Wine:
wine winemenubuilder /path/to/link.lnk
Но у меня нет файла .lnk для моей конкретной программы.
Как создать файл .lnk?
Я изобрел правильное решение, которое гарантирует идеальную совместимость с вином:
lnk () {
cat <<EOF > /tmp/shortcut.vbs
TargetPath = WScript.Arguments(0)
Pos = InStrRev(TargetPath, "\") - 1
If Pos > 0 Then WorkingDirectory = Left(TargetPath, Pos) Else WorkingDirectory = "."
Set lnk = CreateObject("WScript.Shell").CreateShortcut(WScript.Arguments(1))
lnk.TargetPath = TargetPath
lnk.WorkingDirectory = WorkingDirectory
lnk.Save
EOF
wine wscript '//b' 'Z:\tmp\shortcut.vbs' "$@" 2> /dev/null
local exit_code=$?
rm -f /tmp/shortcut.vbs
return $exit_code
}
Я смог чисто вызвать функцию:
lnk 'C:\Program Files (x86)\Rufus\rufus.exe' 'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Rufus.lnk'
Это функция установки программы в моем case:
update_rufus () {
local old_version="$(cat ~/'.wine/dosdevices/c:/Program Files (x86)/Rufus/version.txt' 2> /dev/null)"
local link="$(wget -q 'https://api.github.com/repos/pbatard/rufus/releases/latest' -O - | grep '"browser_download_url":' | grep -o -m 1 -E '[^"]+/rufus-[0-9.]+\.exe')"
wget -q "$link" -O rufus.exe
local exit_code=$?
if [[ $exit_code -eq 0 ]]; then
mkdir -p ~/'.wine/drive_c/Program Files (x86)/Rufus'
echo "$link" | perl -lpe 's|^.*/rufus-([0-9.]+)\.exe$|\1|' > ~/'.wine/drive_c/Program Files (x86)/Rufus/version.txt'
mv rufus.exe ~/'.wine/drive_c/Program Files (x86)/Rufus'
lnk 'C:\Program Files (x86)\Rufus\rufus.exe' 'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Rufus.lnk'
local new_version="$(cat ~/'.wine/dosdevices/c:/Program Files (x86)/Rufus/version.txt')"
if [[ "$new_version" == "$old_version" ]]; then
echo "Rufus is already the newest version ($new_version)."
else
echo "Rufus has been successfully updated ($new_version)."
fi
else
echo 'An error has occurred.'
fi
return $exit_code
}