electron / windows-installer

Build Windows Installers for Electron apps
MIT License
1.57k stars 263 forks source link

Fix wine executable check #513

Open aentwist opened 5 months ago

aentwist commented 5 months ago

Description

The check for wine executable is incorrect. When installing wine, we use the wine metapackage wine. It only installs wine64 behind the scenes.

https://github.com/electron/windows-installer/blob/937bf3f61ef51a15d5e5fc92dca1af8db96c3aa6/src/index.ts#L38-L53

https://github.com/electron/windows-installer/blob/937bf3f61ef51a15d5e5fc92dca1af8db96c3aa6/src/index.ts#L28-L31

x64 -> check for wine64 -> not found -> fail

Meanwhile

$ which wine
/usr/bin/wine
$ which wine64
$ apt search wine | grep wine
[...]
wine/stable,now 8.0~repack-4 all [installed] <- we install this metapackage
wine-binfmt/stable 8.0~repack-4 all
wine64/stable,now 8.0~repack-4 amd64 [installed,automatic] <- we get this

Expected

npm run make -- --platform win32 no wine or mono error

Actual

You must install both Mono and Wine on non-Windows

Proposed Solution

The proposal is to not trouble ourselves with it too much unless there is a real reason we need to make sure 64-bit has 64-bit and 32 has 32. But couldn't a 64-bit user have a 32-bit copy anyway..?

const wineExe = "wine";
const wine64Exe = "wine64";

///

    // Promise.all would be helpful if we were trying to combine these promises into one... but we aren't
    const hasWine = await checkIfCommandExists(wineExe);
    const hasWine64 = await checkIfCommandExists(wine64Exe);
    const hasMono = await checkIfCommandExists(monoExe);

    if (!(hasWine || hasWine64) || !hasMono) {
      throw new Error('You must install both Mono and Wine on non-Windows');
    }

Environment

Debian 12

$ uname -r
5.15.146.1-microsoft-standard-WSL2
$ node
> process.arch
x64
aentwist commented 5 months ago

Workaround is this absurd article, a remarkable pages-long effort that just says 'symlink it' :)

sudo ln -s /usr/bin/wine /usr/bin/wine64
zorn-v commented 2 weeks ago

https://github.com/electron/windows-installer/pull/530 But your "proposed solution" I like better