Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CreateZipFromDirectory exception on macOS Catalina (10.15) #1605

Open
malept opened this issue Mar 31, 2020 · 20 comments
Open

CreateZipFromDirectory exception on macOS Catalina (10.15) #1605

malept opened this issue Mar 31, 2020 · 20 comments

Comments

@malept
Copy link

malept commented Mar 31, 2020

Squirrel version(s)
1.9.1 (as bundled in electron-winstaller 4.0.0)

Description

On macOS Catalina (10.15), 32-bit apps such as 32-bit wine can no longer be run. This means that running Windows apps with wine will not work. Instead, it should be using wine64.

Steps to recreate

On macOS 10.15:

  1. Make sure wine-stable and mono are installed (brew cask install xquartz wine-stable mono)
  2. Either:

Expected behavior

Executes normally.

Actual behavior

Output:

Error {
    message: `Failed with exit code: 255␊

    Output:␊
    System.AggregateException: One or more errors occurred. () ---> System.Exception␊
      at Squirrel.Utility.CreateZipFromDirectory (System.String zipFilePath, System.String inFolder) [0x00119] in <a5ee691170b94c488950c75951ce1ba3>:0 ␊
       --- End of inner exception stack trace ---␊
      at System.Threading.Tasks.Task.ThrowIfExceptional (System.Boolean includeTaskCanceledExceptions) [0x00011] in <b6f643ae6ccb410db69142d5eaf9b9c1>:0 ␊
      at System.Threading.Tasks.Task.Wait (System.Int32 millisecondsTimeout, System.Threading.CancellationToken cancellationToken) [0x00043] in <b6f643ae6ccb410db69142d5eaf9b9c1>:0 ␊
      at System.Threading.Tasks.Task.Wait () [0x00000] in <b6f643ae6ccb410db69142d5eaf9b9c1>:0 ␊
      at Squirrel.ReleasePackage.CreateReleasePackage (System.String outputFile, System.String packagesRootDir, System.Func`2[T,TResult] releaseNotesProcessor, System.Action`1[T] contentsPostProcessHook) [0x001f7] in <a5ee691170b94c488950c75951ce1ba3>:0 ␊
      at Squirrel.Update.Program.Releasify (System.String package, System.String targetDir, System.String packagesDir, System.String bootstrapperExe, System.String backgroundGif, System.String signingOpts, System.String baseUrl, System.String setupIcon, System.Boolean generateMsi, System.String frameworkVersion, System.Boolean generateDeltas) [0x00214] in <a5ee691170b94c488950c75951ce1ba3>:0 ␊
      at Squirrel.Update.Program.executeCommandLine (System.String[] args) [0x004a2] in <a5ee691170b94c488950c75951ce1ba3>:0 ␊
      at Squirrel.Update.Program.main (System.String[] args) [0x00082] in <a5ee691170b94c488950c75951ce1ba3>:0 ␊
      at Squirrel.Update.Program.Main (System.String[] args) [0x00006] in <a5ee691170b94c488950c75951ce1ba3>:0 ␊
    ---> (Inner Exception #0) System.Exception␊
      at Squirrel.Utility.CreateZipFromDirectory (System.String zipFilePath, System.String inFolder) [0x00119] in <a5ee691170b94c488950c75951ce1ba3>:0 <---␊
    `,
  }

Additional information

CI output where this occurred: https://app.circleci.com/pipelines/github/electron/windows-installer/81/workflows/fa34897f-dfa9-4a50-856a-34d3c1804c12/jobs/126

To work around this, I'm using macOS 10.14 in CI, but that doesn't help folks who are trying to use electron-winstaller on Catalina.

I suspect it has something to do with this:

if (Environment.OSVersion.Platform != PlatformID.Win32NT) {
cmd = "wine";
args = sevenZip + " " + args;
}

My suggestion is to either:

  • check the arch at runtime and set wine or wine64 accordingly
  • use the WINE environment variable and fall back to wine
@alexthemonk
Copy link

I'm having the same issue.
It would be very helpful if someone could take a look at this.
Thanks in advance.

@sachinrekhi
Copy link

@malept were you able to find any workaround to this issue, as I'm running into this as well when trying to build my app on macOS Catalina. I thought I might be able to just symlink wine to wine64 on my machine to force the use on wine64, but unfortunately that still results in the same error above.

@malept
Copy link
Author

malept commented Apr 29, 2020

The workarounds that I know of that reliably work are:

  • Use a version of macOS before 10.15 (this is what I'm doing in CI for electron-winstaller)
  • Use a Windows VM
  • Use a Linux VM/container with 32-bit wine installed

@masterkain
Copy link

same issue on catalina :(

@malept
Copy link
Author

malept commented May 6, 2020

Please don't add "same issue"-type comments to this issue, it only adds noise to the folks subscribed to it. Instead, please add a reaction to the issue summary.

@palmadias
Copy link

I am waiting a solution for this bug too. ;)

@fabiosoft
Copy link

Same for me

@mattfbacon
Copy link

I'm also having this issue on Arch Linux with kernel 5.7.7 (so not MacOS exclusive).

@malept
Copy link
Author

malept commented Jul 4, 2020

@mattfbacon install the 32-bit version of Wine.

@mattfbacon
Copy link

mattfbacon commented Jul 6, 2020

Hmm, I'm not sure what you mean, but I believe that you mean regenerate the .wine folder with WINEARCH=win32. I did that, but now it just says "rcedit.exe failed with exit code 1. wine: '/home/matt/.wine' is a 32-bit installation, it cannot support 64-bit applications." and exits. (I don't want to hijack this thread, but I figured I ought to let you know.)

@malept
Copy link
Author

malept commented Jul 6, 2020

@mattfbacon I still think you have a separate issue with a misconfigured wine (32 bit vs 64 bit). I would suggest (temporarily?) moving ~/.wine to ~/.wine32 so that the 64-bit version of wine can generate its installation.

Any further questions about your wine install should go to the Arch Linux forum or the Wine forum, since this really isn't a Wine troubleshooting issue.

abdurrahmanekr added a commit to detayteknoloji/Squirrel.Windows that referenced this issue Dec 11, 2020
@cjahv
Copy link

cjahv commented Nov 19, 2021

temporary solution:

  1. brew install 7zip
  2. mkdir wine_proxy
  3. create a file wine_proxy/wine
  4. add execute permission chmod +x wine_proxy/wine
  5. set environment export PATH="$(pwd)/wine_proxy:$PATH"

wine_proxy/wine:

#!/usr/bin/env node
const { spawn } = require('child_process');

const args = process.argv.slice(2);
let cmd = args.shift();
const cwd = process.cwd();

if (cmd.endsWith('7z.exe')) {
    const z7Args = args.filter((v) => v !== 'on');
    spawn('7z', z7Args, { cwd });
} else {
    // cannot use 'wine' loop
    spawn('/opt/homebrew/bin/wine', [cmd, ...args], { cwd });
}

@hiwanz
Copy link

hiwanz commented Dec 9, 2021

I think it's better to support both wine and wine64 cmd dynamically so that we don't have to change anything by default, cuz brew install them both

➜  ~ file `which wine`
/usr/local/bin/wine: Mach-O executable i386
➜  ~ file `which wine64`
/usr/local/bin/wine64: Mach-O 64-bit executable x86_64

psi = new ProcessStartInfo("wine", fileName + " " + arguments);

@acgrid
Copy link

acgrid commented Feb 9, 2022

  • brew install 7zip

Great approach! I managed to fix a series of issues when packaging Windows on MacOS 12.2 with cjahv's wrapper.

Note: the right path of wine should be got by which wine64.

spawn('/usr/local/bin/wine64', [cmd, ...args], { cwd });

Further memo about this topic:
Wine: https://wiki.winehq.org/MacOS
Mono: https://www.mono-project.com/docs/getting-started/install/mac/
Alternative 7zip: brew install p7zip

@wwvevy
Copy link

wwvevy commented Feb 19, 2022

Hi all, I have the same issue today. And I had tried so many ways to solve it. And there's a workaround of it.
Changing wine64-preloader&wine64 into wine-preloader&wine which in the folder /Applications/Wine\ Stable.app/Contents/Resources/wine/bin. Then this error solved.
But then I get another error that is about rcedit. So I have to deal with it. Then I solved it by replacing rcedit with rcedit which in the /node_modules/electron-winstaller/vendor.
It shows done at last.
But I find that exe file is just 200kb, and not able to run. So I go to check the Squirrel-Releasify.log in the same vendor. And it shows me Failed to write Zip to Setup.exe. So I have no idea about it. If anyone have solution about it, please let me know, THX.
Finnaly, I quit, and use win10 to build. And it goes well :)

@ToddAlvordMinerva
Copy link

For people still experiencing this issue try this, fixed the CreateZipFromDirectory error for me!

brew uninstall --cask xquartz
brew uninstall --cask wine-stable

brew tap gcenx/wine
brew install --cask --no-quarantine wine-crossover

@hiwanz
Copy link

hiwanz commented Apr 19, 2022

For people still experiencing this issue try this, fixed the CreateZipFromDirectory error for me!

brew uninstall --cask xquartz
brew uninstall --cask wine-stable

brew tap gcenx/wine
brew install --cask --no-quarantine wine-crossover

@ToddAlvordMinerva Thx!!! It works fine for me.

@anaisbetts
Copy link
Contributor

anaisbetts commented Apr 19, 2022

macOS is officially unsupported for Squirrel.Windows - if you get it to work, that's great, but tbh I recommend getting an actual Windows machine instead because even if you can build your Electron app on macOS, you're gonna have to test Windows before you ship something. You can set up CI via GitHub Actions to build an installer with some work

@Bug-Reaper
Copy link

macOS is officially unsupported for Squirrel.Windows - if you get it to work, that's great, but tbh I recommend getting an actual Windows machine instead because even if you can build your Electron app on macOS, you're gonna have to test Windows before you ship something. You can set up CI via GitHub Actions to build an installer with some work

Not everyone can afford a separate machine. Sending a windows installer to a friend or trusted user is much cheaper. Just because you can set up CI doesn't mean that's the most desirable solution.

@Bug-Reaper
Copy link

For people still experiencing this issue try this, fixed the CreateZipFromDirectory error for me!

brew uninstall --cask xquartz
brew uninstall --cask wine-stable

brew tap gcenx/wine
brew install --cask --no-quarantine wine-crossover

I believe this no-longer works :'( at least I could never get it to work.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests