Electron+Node调用Windows API 获取定位信息

声明:本文参考了地址:https://github.com/NodeRT/NodeRT 整理出了如何在Electron框架中通过Node.js使用Windows 10 APIs进行原生定位的过程。

本文主要描述:

1、如何在Electron框架中通过Node.js使用Windows 10 APIs进行原生定位。
2、使用NodeRT, 通过为所有Windows名称空间生成Node模块,自动将Microsoft的UWP / WinRT API公开给Node.js环境。 这使Node.js开发人员可以编写使用本机Windows功能的代码。 生成的模块的API(几乎)与MSDN上列出的WinRT API相同。

具体开发步骤

开发环境准备工作

  1. 先查看windows系统版本,进入windows命令行窗口之后,输入‘winver’命令回车可以查看到具体的版本信息了
image.png
  1. 进入 https://www.npmjs.com/search?q=windows.devices.geolocation 查找对应windows版本的NodeRT模块,查找与系统版本匹配或更高的版本,例如:
image.png
  1. 仔细阅读windows.devices.geolocation模块文档,筛选出对应哪些依赖环境, 一般Prequisites有:1)node-gyp 2)Visual Studio 3)win 10 SDK 4) Python 这个要根据具体的nodert模块的要求
image.png

环境搭建

node安装

下载地址:https://nodejs.org/en/download/

  1. 先查看node环境,若没有安装node, 登录Node.js官方网站,下载Node.js软件包。请自行选择系统对应的软件包。版本推荐为v12+

  2. 点击下载后的软件包进行安装,全部按照默认设置点击Next,直至Finish。安装过程中,Node.js会自动在系统的path环境变量中配置node.exe的目录路径。在cmd命令窗口中直接使用node或npm命令显示版本号即安装成功。

image.png

Ps: npm 是node的包管理器,里面有很多可以下载的工具包,插件等等,例如node-gyp,直接使用npm install 包名 -g 下载就可以了,具体可以根据项目要求然后按照教程下载安装。

node-gyp安装

什么是node-gyp?

gyp是一种根据c++源代码编译的工具,node-gyp就是为node编译c++扩展的时候使用的编译工具,NodeRT模块是C++源代码实现的,如需公开给Node.js环境直接调用需要使用node-gyp重编译。依赖node环境。

  1. 根据 windows.devices.geolocation模块 全局安装对应的 node-gyp 版本

npm install -g node-gyp

image.png
  1. 安装完毕之后node-gyp list看一下,显示如下:
image.png

若没有开发环境相关文件,提示使用 node-gyp install安装

  1. node-gyp install安装头文件和静态库

显示如下:

image.png

这里提示最后一个静态库404了,找不到,在之后node-gyp编译文件时就会报错

image.png

到时需要手动下载一下,下载地址:https://nodejs.org/download/release/v12.19.0/win-x64/node.lib

然后放到上一步提示报错的位置,替换掉残缺的文件!

  1. 最后node-gyp list看一下
image.png

到这里我们还不可以进行编译,因为node-gyp需要依赖python环境和微软的c++构建工具来进行编译

Visual Studio安装

下载地址:https://visualstudio.microsoft.com/zh-hans/downloads/

  1. 根据windows.devices.geolocation模块下载对应的Visual Studio 版本,这里下载的Visual Studio 2019 (Community)版本

  2. 安装时勾选c++, windows开发,并勾选对应版本的win 10 sdk,如图:

image.png
  1. 若是没有对应的win 10 sdk可选,则可以单独去下载安装;

  2. 完成下载,完成安装;

image.png
  1. 安装好了以后要配置一下依赖,让node-gyp可以找到依赖
npm config set msvs_version 2019 // 2019为当前vs版本

win10 sdk安装

下载地址:https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/

  1. 安装 Visual Studio 2019 (Community)版本时若是没有对应的win10 sdk 版本可选,则可以单独去选择对应版本下载安装;
image.png
  1. 完成下载,完成安装;
image.png
image.png
image.png
image.png
image.png

Python安装

下载地址:https://www.python.org/downloads/

  1. 根据windows.devices.geolocation模块下载对应的python版本,

  2. 安装的时候会有一个选项是添加PATH,自动添加环境变量,可以勾选,但是安装完以后还是要去环境变量里面查看一下是否添加了

  3. 若自动添加环境变量失败则需手动添加python变量

image.png
  1. 环境变量添加完成之后打开cmd输入python 命令查看,如出现版本信息则代表安装成功。
image.png
  1. 安装好了以后要配置一下依赖,让node-gyp可以找到python依赖
npm config set python python3.8   // 3.8为当前python版本

api调用说明

  1. node环境下,项目工程下添加模块依赖:
npm install @nodert-win10-20h1/windows.devices.geolocation

成功后会在package.json dependencies 中生成一条记录

"dependencies":{
  "@nodert-win10-20h1/windows.devices.geolocation":"^0.1.0"
}

对应node_modules成功添加@nodert-win10-20h1/windows.devices.geolocation依赖包

  1. 使用node-gyp重建此模块,请确保使用--msvs_version = 2012/2013/2015/2017/2019标志使用适当的VS版本:
cd @nodert-win10-20h1/windows.devices.geolocation
node-gyp rebuild --msvs_version=2019
image.png
  1. 在集成node环境中使用,使用方法如下:
image.png

常见问题

1. 添加模块依赖编译时常见报错:node.lib文件报错

image.png

这是node-gyp install安装头文件和静态库时有个文件下载失败,需要手动下载一下,下载地址:https://nodejs.org/download/release/v12.19.0/win-x64/node.lib

然后放到上一步提示报错的位置,替换掉残缺的文件,重新添加即可成功!

2. 添加模块依赖编译时常见报错:未能找到的程序集platform.winmd

image.png

这个错误一般是由于依赖和vs、sdk版本对应不上导致的问题,所以在下载依赖前要先仔细看文档,了解依赖编译的先决条件

3. fatal error C1107: 未能找到程序集“Windows.winmd”: 请使用 /AI 或通过设置 LIBPATH 环境变量指定程序集搜索路径

其实这个问题就是代码的问题,根据这个 issue 中的描述,当前版本的 NodeRT 只会去扫描 C:\Program Files (x86)\Windows Kits\10\UnionMetadata 路径下的 .winmd 文件,硬编码了依赖库目录(不过也说得通)。

所以解决方案就是,把你的 Windows.winmd 文件放到这个文件夹下就行了,默认安装的 Windows 10 SDK 应该都在这个文件夹下的一个个子文件夹,直接把对应版本的 Windows.winmd 挪出来就行。

比如说我就把 C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.19041.0\Windows.winmd 这个文件往上移动了一级,也就是移动到了 .. 文件夹。现在再去安装,就已经可以了.

4.使用了此NodeRT打包之后在windows系统平板上安装报错

报错截图.png

从报错信息明显得知是缺少了一些必要的依赖库所以导致应用安装报错。通过多番测试得知是由 NodeRT引起的。它只有在安装了带有 Windows 10 SDK 的 Visual Studio 时才有效。这导致在 Electron 应用程序中使用NodeRT进行定位是非常无用的,因为每个用户平板都必须同时安装 Visual Studio。这个解决方案显然是不合常理的。所以我们需要去跟踪到底缺少了哪些原因依赖库?
这是部署 Windows 桌面应用程序的一个普遍问题,需要确保应用程序所依赖的 DLL到底缺少哪些。
参考链接:https://github.com/NodeRT/NodeRT/issues/87
依赖比对软件:http://www.dependencywalker.com/
根据报错信息使用工具对比找到依赖库,将对应的DLL依赖打入安装包。

image.png

image.png
image.png

找出缺失的的DLL依赖之后,在electron-builder配置中增加extraFiles设置(打包额外的文件放在项目的根目录),将对应的DLL依赖打入安装包,即可解决安装报错问题。


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容