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

arm support for Windows using ia32 binaries broken since Electron 25 #175

Closed
andymartinwork opened this issue Dec 14, 2023 · 2 comments
Closed

Comments

@andymartinwork
Copy link

We use 32bit Electron builds of our app for compatibility with running on arm based versions of windows. It's possible to test this if you have no arm based windows machine by running windows on mac through parallels.

I updated Electron to the latest castlabs version (28) and encountered this exception in components.whenReady:

{
  "errors": [
    {
      "detail": {
        "id": "neifaoindggfcjicffkgpmnlppeffabd",
        "status": "not-installed",
        "title": "Google Widevine Windows CDM",
        "version": null
      }
    }
  ]
}

I tracked the break to castlabs electron 24 -> 25

The downloaded version of the Widevine CDM is 4.10.2710.0, both for 24 and 25.
I'm wondering if there's something that changed in the castlabs implementation between these versions and if there's anything I can do about it?

Electron 24 to 25 jumps from Chromium 112 to 114 if that helps.

@khwaaj
Copy link
Collaborator

khwaaj commented Dec 14, 2023

Ok, this is not the regular Widevine CDM, but the L1 CDM that is available on Windows only. Apparently it is not available in this case though, it might not be available on 32-bit Windows at all, but I need to check that.

Since we hardened the installation checks, as a consequence of the recent CDM removals for older versions of Chromium by Google, we explicitly check that the installation of required components was successful (to avoid errors sneaking by unexpectedly). This is why you are seeing the error here, because by default we require both CDMs on Windows.

Fortunately there is a way around this already, while we investigate whether this should be the default for Windows or not (especially 32-bit). The components.whenReady() function now takes an optional argument that can be used to specify which components are considered required. So if all you need is the standard Widevine L3 CDM, you can pass that to the whenReady() call, e.g:

app.whenReady().then(async () => {
  try {
    let result = await components.whenReady([components.WIDEVINE_CDM_ID]);
    console.log('1: components result:', result);
    let status = components.status();
    console.log('1: components status:', status);
    createWindow();
  } catch (e) {
    console.log('caught error:', e);
    if ('errors' in e) {
      for (error of e.errors) {
        console.log('error:', error);
      }
    }
    app.exit(1);
  }
});

@andymartinwork
Copy link
Author

This seems to fix my problem, and the CDM still works on Windows arm64. Thank you!

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

2 participants