Path to Microsoft.JavaScript.NodeApi.DotNetHost.dll in electron binary is incorrect
sumeet-singh04 opened this issue · 4 comments
When electron apps are packaged with ASAR enabled, all binaries get placed inside app.asar
archive, but when accessed those need to be accessed via app.asar.unpacked
directory if the node module does not use path
or fs
to resolve file names.
For now I am doing the below inside init.js
to get things working on my end, but it would be nice to have this handled within the node-api-dotnet
library.
let managedHostPath = __dirname + `/${targetFramework}/${assemblyName}.DotNetHost.dll`
managedHostPath = managedHostPath.indexOf('app.asar.unpacked') < 0 ?
managedHostPath.replace('app.asar', 'app.asar.unpacked') : managedHostPath;
I'm not sure about putting this kind of electron-specific logic in the library. Why isn't this a problem for any other npm package that loads binaries?
Apparently it is a common problem, and is the reason the hazardous package was created. However that reportedly has problems with newer Electron builds.
A potential solution here could be to offer a more general way to customize the initialization. Something like this:
const initDotnet = require('node-api-dotnet/init');
const dotnet = initDotnet({
targetFramework: 'net8.0',
binDir: 'path/to/asar.unpacked',
});
The optional binDir
would be used instead of __dirname
as the base path for locating the .NET hosting binaries.
Once initialized, any other calls to require('node-api-dotnet')
return the existing already-initialized instance.