J'essaie d'utiliser Edge.js pour exécuter du code .NET pour imprimer sur Windows dans une application Electron. J'ai essayé electron-Edge et j'ai également essayé de construire manuellement les modules Edge.js ciblant Electron en suivant les instructions dans les documents Electron , mais je continue à obtenir ce qui suit erreur lorsque j'essaie d'utiliser Edge dans l'application packagée:
Error: The specified module could not be found.
\\?\C:\path\to\app\app-1.0.0\resources\app.asar.unpacked\node_modules\Edge\lib\native\win32\x64\6.5.0\Edge_nativeclr.node
at Error (native)
at process.module.(anonymous function) (ELECTRON_ASAR.js:178:20)
at process.module.(anonymous function) [as dlopen] (ELECTRON_ASAR.js:178:20)
at Object.Module._extensions..node (module.js:583:18)
at Object.module.(anonymous function) [as .node] (ELECTRON_ASAR.js:192:18)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)
at Function.Module._load (module.js:424:3)
at Module.require (module.js:483:17)
at require (internal/module.js:20:19)
J'ai vérifié le système de fichiers et le Edge_nativeclr.node
le module existe, en fait. Je soupçonne que je ne suis pas en train de construire le module correctement et qu'il cible peut-être toujours la mauvaise version du nœud et qu'électron n'est donc pas en mesure d'importer le module.
J'ai essayé plusieurs choses différentes, notamment en suivant étapes d'Electron-Edge pour mettre à jour manuellement le build.bat
et ajoutez le --target=1.4.12 --dist-url=https://atom.io/download/atom-Shell
drapeaux sur le node-gyp configure build
.
J'ai également défini les options de configuration npm suivantes dans mon .npmrc
:
target=1.4.12
Arch=x64
target_Arch=x64
disturl=https://atom.io/download/electron
runtime=electron
build_from_source=true
msvs_version=2015
Et a couru le build.bat
, en veillant à définir le Edge_NATIVE
variable d'environnement pour pointer vers le Edge_nativeclr.node
fichier, mais a obtenu le même résultat.
J'ai finalement compris cela après m'être cogné la tête contre le clavier pendant quelques jours. J'ai reçu quelques indices de electron-userland/electron-packager#217
et electron/electron#892
, qui indiquait que cette erreur, "Le module spécifié était introuvable", pouvait se produire lorsque le module natif manquait une dépendance, telle qu'un .dll
, et que vous pourriez utiliser Dependency Walker pour vérifier les dépendances de tout .node
module.
J'ai chargé Edge_nativeclr.node
dans Dependency Walker et a remarqué que VCRUNTIME140.DLL
, le runtime Visual Studio 2015 C, était manquant. Edge.js est fourni avec le msvcr120.dll
, le runtime Visual Studio 2013 C, mais j'avais reconstruit le module avec le msvs_version
défini sur 2015.
Une fois que j'ai placé une copie du vcruntime140.dll
dans le même répertoire que Edge_nativeclr.node
, tout a commencé à fonctionner comme prévu.
J'ai également eu cette erreur même si VC64 Redistributable x64 était correctement installé. Il s'avère que l'erreur dans mon cas n'était pas vraiment un problème car tout fonctionnait bien (j'ai pu exécuter l'application de démarrage rapide d'électrons avec electron-Edge).
Malgré cela, l'auteur a corrigé l'installation afin que l'erreur ne se produise pas. https://github.com/kexplo/electron-Edge/issues/25#issuecomment-272908409
En outre, si vous chargez Edge_nativeclr.node dans Dependency Walker, vous verrez le VCRUNTIME140.DLL résolu correctement (par exemple sous C:\Windows\System32 sur mon PC). Cependant, vous pouvez voir plusieurs points d'interrogation et erreurs. Il s'avère que cela est simplement dû à certaines limitations de Dependency Walker et non à un problème réel. Voir Dependency Walker: dll manquants