node-keytar icon indicating copy to clipboard operation
node-keytar copied to clipboard

Keytar + Electron: Works on OSX, "Error: %1 is not a valid Win32 application" on Windows

Open tylerjames opened this issue 9 years ago • 24 comments

I added Keytar to my Electron app and ran electron-rebuild on it. After packaging the resulting app works just fine on OSX, but when I try to run the .exe on windows I get the dreaded:

"Error: %1 is not a valid Win32 application"

I read that this might be due to the module being built for x64 which makes it not run on an ia32 environment.

So I installed node-gyp and rebuilt the module using:

HOME=~/.electron-gyp node-gyp rebuild --target=0.36.2 --arch=ia32 --dist-url=https://atom.io/download/atom-shell

It built fine but I got the same result after packaging the app for win32.

Is there any way to get this running on a 32-bit windows environment? Am I doing something wrong when in rebuilding step?

I can see that keytar is at least included inside the app folder after packaging. Is there a way to tell what architecture keytar was built for?

Thanks in advance for any help.

tylerjames avatar Mar 09 '16 18:03 tylerjames

I'm running into the same issue, but I'm also not sure how to fix it.

felixrieseberg avatar Mar 22 '16 17:03 felixrieseberg

i got same error and managed that. You may run 32bit of keytar on 64bit of electron. To check which arch the node(electron) is running on:

console.log(process.arch);

also check out electron-rebuild for building module instead of using node-gyp directly.

craftzdog avatar Apr 20 '16 15:04 craftzdog

rebuild with electron-rebuild works for me

.\node_modules\.bin\electron-rebuild.cmd -w keytar -p -f

HanaHsu avatar May 16 '16 10:05 HanaHsu

I am still running into this while building a windows package on a Mac OS. Is there a specific way keytar needs to be rebuilt if doing this?

surajreddy avatar Mar 30 '17 22:03 surajreddy

same error for me

AndreBlumenthal avatar May 04 '17 11:05 AndreBlumenthal

In my experience, I had to build the Windows version of my electron app on windows in order for modules to be compiled and packaged properly. So, I built my package for Mac on Mac, and the windows app on windows.

I don't think this is necessary if you don't have any native modules. In that case you can build and package on one platform for all platforms. But for native modules, I was only able to get it to work by building and packaging on the same platform that I'm targeting.

I've heard that you might be able to use wine on mac to build and compile native modules into electron apps. I tried it, but it didn't work for me.

Microsoft provides free VM you can use for these purposes

gitmitch avatar May 04 '17 12:05 gitmitch

Running electron-rebuild with yarn electron-rebuild seemed to do the trick for us in the end. We were trying to run electron-rebuild with a specific version, which did not seem to play well with keytar.

TL;DR:

  • Make sure you're compiling on a windows machine
  • You will need windows build tools installed to compile modules on windows.
  • If you're having issues with keytar, install electron-rebuild and run electron-rebuild in the folder of your app with the command $(npm bin)/electron-rebuild or yarn electron-rebuild if you're using yarn.

surajreddy avatar May 04 '17 14:05 surajreddy

same error

xp6530 avatar Jun 08 '17 08:06 xp6530

Getting the same error. electron-rebuild had no results.

levinunnink avatar Jul 07 '17 22:07 levinunnink

@xp6530 @levinunnink can you try deleting your node_modules directory and trying again?

surajreddy avatar Jul 10 '17 14:07 surajreddy

As I read here, there is nothing to do to compile an electron app for Windows from macOS and compile the Windows version should be done on Windows ? Right ?

If no, could someone help me ? I've the "Error: %1 is not a valid Win32 application" error from the first post who the app works fine on mac but not in windows. Trying electron-rebuild but don't works..

popod avatar Jul 20 '17 21:07 popod

Hi all, did anyone have any luck with this? I'm hitting the same error and have tried all the suggestions above. Thanks

jamarw avatar Aug 08 '17 19:08 jamarw

@jamarw user keytar-prebuild ! See #67. This works for me.

popod avatar Aug 08 '17 20:08 popod

Thanks @popod ! Appreciate the help.

jamarw avatar Aug 08 '17 21:08 jamarw

So I have to compile electron on a Windows machine to get correct Windows executables? Thats a problem because i don't have one

Xosmond avatar Jan 30 '18 18:01 Xosmond

This now should be resolved thanks to https://github.com/atom/node-keytar/pull/67.

IGassmann avatar Feb 28 '18 22:02 IGassmann

Still happening with the latest version of node-keytar after building an electron x64 app.

IGassmann avatar Mar 13 '18 18:03 IGassmann

@IGassmann which version of Electron are you trying to target?

shiftkey avatar Jul 09 '18 18:07 shiftkey

Hi everyone, I am also getting this issue (the one @IGassmann is reporting). I am using electron 4.0.4 and keytar 4.4.0. I am using electron-builder to build a 64 bit windows package. But when I run the app (the package is successfully built, problem happens on app execution) I get this error. Not an issue on mac

Any ideas how I can work around this at the moment?

adeperio avatar Feb 14 '19 06:02 adeperio

Same as @adeperio but weirdly it happens only in some conditions, could only reproduce it with CI now electron 8, keytar 5.2.0, electron-builder 22.3.3 https://github.com/tutao/tutanota/blob/efd3a3ff75f9be485d7f371c4e3e05eb08f3935c/package.json#L26

charlag avatar Feb 17 '20 12:02 charlag

We still didn't find out the reason but might be that manually clearing node_modules may help (even with npm ci)

charlag avatar Feb 17 '20 15:02 charlag

i'm using the "keytar": "^7.3.0", on windows with "electron": "11.1.1", and "@electron-forge/cli": "^6.0.0-beta.54",. Still getting .webpack\main/c33748addbc1c5372b52757c2542d3fd.node is not a valid Win32 application. where c33748addbc1c5372b52757c2542d3fd.node is keytar.node any idea what is the solution and possible alternative to keytar?

Thanks

woss avatar Jan 05 '21 20:01 woss

So, we are trying to automate our builds using electron-builder's provided docker image electronuserland/builder:wine as they show in their docs.

We're getting the same error in the console:

Uncaught Error: Cannot open C:\Program Files\peerlogic\resources\app.asar\dist\renderer\_nuxt\keytar.node: Error: C:\Users\Administrator\AppData\Local\Temp\2\24875caf-7428-4310-817f-9e24ef377df9.tmp.node is not a valid Win32 application.
C:\Users\Administrator\AppData\Local\Temp\2\24875caf-7428-4310-817f-9e24ef377df9.tmp.node

I'm wondering if there is a way for the prebuild to not try and detect what OS it's on and specify it directly? Or the prebuild can recognize Wine is installed and instead build for Windows?

For reference, here is the output from the prebuild of keytar inside the wine docker container. As you can see it's building all 10 versions from v75 to v85 as linux instead of windows: prebuilds/keytar-v7.3.0-electron-v*-linux-x64.tar.gz

tomboolean avatar Mar 21 '21 06:03 tomboolean

yarn run v1.22.4
$ prebuild -t 7.0.0 -t 8.0.0 -t 9.0.0 -t 10.0.0 -t 11.0.0 -r electron --strip
prebuild info begin Prebuild version 10.0.1
prebuild info build Preparing to prebuild [email protected] for electron 7.0.0 on linux-x64 using node-gyp
prebuild info find Python using Python version 3.6.9 found at "/usr/bin/python3"
prebuild http GET https://atom.io/download/electron/v7.0.0/node-v7.0.0-headers.tar.gz
prebuild http 200 https://atom.io/download/electron/v7.0.0/node-v7.0.0-headers.tar.gz
prebuild http GET https://atom.io/download/electron/v7.0.0/SHASUMS256.txt
prebuild http 200 https://atom.io/download/electron/v7.0.0/SHASUMS256.txt
prebuild info spawn /usr/bin/python3
prebuild info spawn args [
prebuild info spawn args   '/usr/local/share/.config/yarn/global/node_modules/node-gyp/gyp/gyp_main.py',
prebuild info spawn args   'binding.gyp',
prebuild info spawn args   '-f',
prebuild info spawn args   'make',
prebuild info spawn args   '-I',
prebuild info spawn args   '/builds/peerlogic/peerlogic-desktop-app/node_modules/keytar/build/config.gypi',
prebuild info spawn args   '-I',
prebuild info spawn args   '/usr/local/share/.config/yarn/global/node_modules/node-gyp/addon.gypi',
prebuild info spawn args   '-I',
prebuild info spawn args   '/tmp/prebuild/electron/7.0.0/include/node/common.gypi',
prebuild info spawn args   '-Dlibrary=shared_library',
prebuild info spawn args   '-Dvisibility=default',
prebuild info spawn args   '-Dnode_root_dir=/tmp/prebuild/electron/7.0.0',
prebuild info spawn args   '-Dnode_gyp_dir=/usr/local/share/.config/yarn/global/node_modules/node-gyp',
prebuild info spawn args   '-Dnode_lib_file=/tmp/prebuild/electron/7.0.0/<(target_arch)/node.lib',
prebuild info spawn args   '-Dmodule_root_dir=/builds/peerlogic/peerlogic-desktop-app/node_modules/keytar',
prebuild info spawn args   '-Dnode_engine=v8',
prebuild info spawn args   '--depth=.',
prebuild info spawn args   '--no-parallel',
prebuild info spawn args   '--generator-output',
prebuild info spawn args   'build',
prebuild info spawn args   '-Goutput_dir=.'
prebuild info spawn args ]
prebuild info spawn make
prebuild info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: Entering directory '/builds/peerlogic/peerlogic-desktop-app/node_modules/keytar/build'
  CXX(target) Release/obj.target/keytar/src/async.o
  CXX(target) Release/obj.target/keytar/src/main.o
  CXX(target) Release/obj.target/keytar/src/keytar_posix.o
  SOLINK_MODULE(target) Release/obj.target/keytar.node
  COPY Release/keytar.node
make: Leaving directory '/builds/peerlogic/peerlogic-desktop-app/node_modules/keytar/build'
prebuild info build Stripping debug information from build/Release/keytar.node
prebuild info build Packing build/Release/keytar.node into prebuilds/keytar-v7.3.0-electron-v75-linux-x64.tar.gz
prebuild info build Prebuild written to prebuilds/keytar-v7.3.0-electron-v75-linux-x64.tar.gz
prebuild info build Preparing to prebuild [email protected] for electron 8.0.0 on linux-x64 using node-gyp
prebuild info find Python using Python version 3.6.9 found at "/usr/bin/python3"
prebuild http GET https://atom.io/download/electron/v8.0.0/node-v8.0.0-headers.tar.gz
prebuild http 200 https://atom.io/download/electron/v8.0.0/node-v8.0.0-headers.tar.gz
prebuild http GET https://atom.io/download/electron/v8.0.0/SHASUMS256.txt
prebuild http 200 https://atom.io/download/electron/v8.0.0/SHASUMS256.txt
prebuild info spawn /usr/bin/python3
prebuild info spawn args [
prebuild info spawn args   '/usr/local/share/.config/yarn/global/node_modules/node-gyp/gyp/gyp_main.py',
prebuild info spawn args   'binding.gyp',
prebuild info spawn args   '-f',
prebuild info spawn args   'make',
prebuild info spawn args   '-I',
prebuild info spawn args   '/builds/peerlogic/peerlogic-desktop-app/node_modules/keytar/build/config.gypi',
prebuild info spawn args   '-I',
prebuild info spawn args   '/usr/local/share/.config/yarn/global/node_modules/node-gyp/addon.gypi',
prebuild info spawn args   '-I',
prebuild info spawn args   '/tmp/prebuild/electron/8.0.0/include/node/common.gypi',
prebuild info spawn args   '-Dlibrary=shared_library',
prebuild info spawn args   '-Dvisibility=default',
prebuild info spawn args   '-Dnode_root_dir=/tmp/prebuild/electron/8.0.0',
prebuild info spawn args   '-Dnode_gyp_dir=/usr/local/share/.config/yarn/global/node_modules/node-gyp',
prebuild info spawn args   '-Dnode_lib_file=/tmp/prebuild/electron/8.0.0/<(target_arch)/node.lib',
prebuild info spawn args   '-Dmodule_root_dir=/builds/peerlogic/peerlogic-desktop-app/node_modules/keytar',
prebuild info spawn args   '-Dnode_engine=v8',
prebuild info spawn args   '--depth=.',
prebuild info spawn args   '--no-parallel',
prebuild info spawn args   '--generator-output',
prebuild info spawn args   'build',
prebuild info spawn args   '-Goutput_dir=.'
prebuild info spawn args ]
prebuild info spawn make
prebuild info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: Entering directory '/builds/peerlogic/peerlogic-desktop-app/node_modules/keytar/build'
  CXX(target) Release/obj.target/keytar/src/async.o
  CXX(target) Release/obj.target/keytar/src/main.o
  CXX(target) Release/obj.target/keytar/src/keytar_posix.o
  SOLINK_MODULE(target) Release/obj.target/keytar.node
  COPY Release/keytar.node
make: Leaving directory '/builds/peerlogic/peerlogic-desktop-app/node_modules/keytar/build'
prebuild info build Stripping debug information from build/Release/keytar.node
prebuild info build Packing build/Release/keytar.node into prebuilds/keytar-v7.3.0-electron-v76-linux-x64.tar.gz
prebuild info build Prebuild written to prebuilds/keytar-v7.3.0-electron-v76-linux-x64.tar.gz
prebuild info build Preparing to prebuild [email protected] for electron 9.0.0 on linux-x64 using node-gyp
prebuild info find Python using Python version 3.6.9 found at "/usr/bin/python3"
prebuild http GET https://atom.io/download/electron/v9.0.0/node-v9.0.0-headers.tar.gz
prebuild http 200 https://atom.io/download/electron/v9.0.0/node-v9.0.0-headers.tar.gz
prebuild http GET https://atom.io/download/electron/v9.0.0/SHASUMS256.txt
prebuild http 200 https://atom.io/download/electron/v9.0.0/SHASUMS256.txt
prebuild info spawn /usr/bin/python3
prebuild info spawn args [
prebuild info spawn args   '/usr/local/share/.config/yarn/global/node_modules/node-gyp/gyp/gyp_main.py',
prebuild info spawn args   'binding.gyp',
prebuild info spawn args   '-f',
prebuild info spawn args   'make',
prebuild info spawn args   '-I',
prebuild info spawn args   '/builds/peerlogic/peerlogic-desktop-app/node_modules/keytar/build/config.gypi',
prebuild info spawn args   '-I',
prebuild info spawn args   '/usr/local/share/.config/yarn/global/node_modules/node-gyp/addon.gypi',
prebuild info spawn args   '-I',
prebuild info spawn args   '/tmp/prebuild/electron/9.0.0/include/node/common.gypi',
prebuild info spawn args   '-Dlibrary=shared_library',
prebuild info spawn args   '-Dvisibility=default',
prebuild info spawn args   '-Dnode_root_dir=/tmp/prebuild/electron/9.0.0',
prebuild info spawn args   '-Dnode_gyp_dir=/usr/local/share/.config/yarn/global/node_modules/node-gyp',
prebuild info spawn args   '-Dnode_lib_file=/tmp/prebuild/electron/9.0.0/<(target_arch)/node.lib',
prebuild info spawn args   '-Dmodule_root_dir=/builds/peerlogic/peerlogic-desktop-app/node_modules/keytar',
prebuild info spawn args   '-Dnode_engine=v8',
prebuild info spawn args   '--depth=.',
prebuild info spawn args   '--no-parallel',
prebuild info spawn args   '--generator-output',
prebuild info spawn args   'build',
prebuild info spawn args   '-Goutput_dir=.'
prebuild info spawn args ]
prebuild info spawn make
prebuild info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: Entering directory '/builds/peerlogic/peerlogic-desktop-app/node_modules/keytar/build'
  CXX(target) Release/obj.target/keytar/src/async.o
  CXX(target) Release/obj.target/keytar/src/main.o
  CXX(target) Release/obj.target/keytar/src/keytar_posix.o
  SOLINK_MODULE(target) Release/obj.target/keytar.node
  COPY Release/keytar.node
make: Leaving directory '/builds/peerlogic/peerlogic-desktop-app/node_modules/keytar/build'
prebuild info build Stripping debug information from build/Release/keytar.node
prebuild info build Packing build/Release/keytar.node into prebuilds/keytar-v7.3.0-electron-v80-linux-x64.tar.gz
prebuild info build Prebuild written to prebuilds/keytar-v7.3.0-electron-v80-linux-x64.tar.gz
prebuild info build Preparing to prebuild [email protected] for electron 10.0.0 on linux-x64 using node-gyp
prebuild info find Python using Python version 3.6.9 found at "/usr/bin/python3"
prebuild http GET https://atom.io/download/electron/v10.0.0/node-v10.0.0-headers.tar.gz
prebuild http 200 https://atom.io/download/electron/v10.0.0/node-v10.0.0-headers.tar.gz
prebuild http GET https://atom.io/download/electron/v10.0.0/SHASUMS256.txt
prebuild http 200 https://atom.io/download/electron/v10.0.0/SHASUMS256.txt
prebuild info spawn /usr/bin/python3
prebuild info spawn args [
prebuild info spawn args   '/usr/local/share/.config/yarn/global/node_modules/node-gyp/gyp/gyp_main.py',
prebuild info spawn args   'binding.gyp',
prebuild info spawn args   '-f',
prebuild info spawn args   'make',
prebuild info spawn args   '-I',
prebuild info spawn args   '/builds/peerlogic/peerlogic-desktop-app/node_modules/keytar/build/config.gypi',
prebuild info spawn args   '-I',
prebuild info spawn args   '/usr/local/share/.config/yarn/global/node_modules/node-gyp/addon.gypi',
prebuild info spawn args   '-I',
prebuild info spawn args   '/tmp/prebuild/electron/10.0.0/include/node/common.gypi',
prebuild info spawn args   '-Dlibrary=shared_library',
prebuild info spawn args   '-Dvisibility=default',
prebuild info spawn args   '-Dnode_root_dir=/tmp/prebuild/electron/10.0.0',
prebuild info spawn args   '-Dnode_gyp_dir=/usr/local/share/.config/yarn/global/node_modules/node-gyp',
prebuild info spawn args   '-Dnode_lib_file=/tmp/prebuild/electron/10.0.0/<(target_arch)/node.lib',
prebuild info spawn args   '-Dmodule_root_dir=/builds/peerlogic/peerlogic-desktop-app/node_modules/keytar',
prebuild info spawn args   '-Dnode_engine=v8',
prebuild info spawn args   '--depth=.',
prebuild info spawn args   '--no-parallel',
prebuild info spawn args   '--generator-output',
prebuild info spawn args   'build',
prebuild info spawn args   '-Goutput_dir=.'
prebuild info spawn args ]
prebuild info spawn make
prebuild info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: Entering directory '/builds/peerlogic/peerlogic-desktop-app/node_modules/keytar/build'
  CXX(target) Release/obj.target/keytar/src/async.o
  CXX(target) Release/obj.target/keytar/src/main.o
  CXX(target) Release/obj.target/keytar/src/keytar_posix.o
  SOLINK_MODULE(target) Release/obj.target/keytar.node
  COPY Release/keytar.node
make: Leaving directory '/builds/peerlogic/peerlogic-desktop-app/node_modules/keytar/build'
prebuild info build Stripping debug information from build/Release/keytar.node
prebuild info build Packing build/Release/keytar.node into prebuilds/keytar-v7.3.0-electron-v82-linux-x64.tar.gz
prebuild info build Prebuild written to prebuilds/keytar-v7.3.0-electron-v82-linux-x64.tar.gz
prebuild info build Preparing to prebuild [email protected] for electron 11.0.0 on linux-x64 using node-gyp
prebuild info find Python using Python version 3.6.9 found at "/usr/bin/python3"
prebuild http GET https://atom.io/download/electron/v11.0.0/node-v11.0.0-headers.tar.gz
prebuild http 200 https://atom.io/download/electron/v11.0.0/node-v11.0.0-headers.tar.gz
prebuild http GET https://atom.io/download/electron/v11.0.0/SHASUMS256.txt
prebuild http 200 https://atom.io/download/electron/v11.0.0/SHASUMS256.txt
prebuild info spawn /usr/bin/python3
prebuild info spawn args [
prebuild info spawn args   '/usr/local/share/.config/yarn/global/node_modules/node-gyp/gyp/gyp_main.py',
prebuild info spawn args   'binding.gyp',
prebuild info spawn args   '-f',
prebuild info spawn args   'make',
prebuild info spawn args   '-I',
prebuild info spawn args   '/builds/peerlogic/peerlogic-desktop-app/node_modules/keytar/build/config.gypi',
prebuild info spawn args   '-I',
prebuild info spawn args   '/usr/local/share/.config/yarn/global/node_modules/node-gyp/addon.gypi',
prebuild info spawn args   '-I',
prebuild info spawn args   '/tmp/prebuild/electron/11.0.0/include/node/common.gypi',
prebuild info spawn args   '-Dlibrary=shared_library',
prebuild info spawn args   '-Dvisibility=default',
prebuild info spawn args   '-Dnode_root_dir=/tmp/prebuild/electron/11.0.0',
prebuild info spawn args   '-Dnode_gyp_dir=/usr/local/share/.config/yarn/global/node_modules/node-gyp',
prebuild info spawn args   '-Dnode_lib_file=/tmp/prebuild/electron/11.0.0/<(target_arch)/node.lib',
prebuild info spawn args   '-Dmodule_root_dir=/builds/peerlogic/peerlogic-desktop-app/node_modules/keytar',
prebuild info spawn args   '-Dnode_engine=v8',
prebuild info spawn args   '--depth=.',
prebuild info spawn args   '--no-parallel',
prebuild info spawn args   '--generator-output',
prebuild info spawn args   'build',
prebuild info spawn args   '-Goutput_dir=.'
prebuild info spawn args ]
prebuild info spawn make
prebuild info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: Entering directory '/builds/peerlogic/peerlogic-desktop-app/node_modules/keytar/build'
  CXX(target) Release/obj.target/keytar/src/async.o
  CXX(target) Release/obj.target/keytar/src/main.o
  CXX(target) Release/obj.target/keytar/src/keytar_posix.o
  SOLINK_MODULE(target) Release/obj.target/keytar.node
  COPY Release/keytar.node
make: Leaving directory '/builds/peerlogic/peerlogic-desktop-app/node_modules/keytar/build'
prebuild info build Stripping debug information from build/Release/keytar.node
prebuild info build Packing build/Release/keytar.node into prebuilds/keytar-v7.3.0-electron-v85-linux-x64.tar.gz
prebuild info build Prebuild written to prebuilds/keytar-v7.3.0-electron-v85-linux-x64.tar.gz```

tomboolean avatar Mar 21 '21 06:03 tomboolean