EXSI 虚拟机直连USB证书/令牌

最近入手了个Gen10 plus寻思安个Exsi来用。因为性能够(我入手的是个高配),准备分出一个虚拟机来进行软件打包。

因为打包时候需要进行代码签名,而且证书是存在USB令牌里的。所以得让它直通虚拟机,这样驱动才可以正常识别。

但是,直接在设置中添加,启动系统后总是莫名奇妙的消失。

下面是解决方案,记录一下,以防忘记。


GN报UnicodeEncodeError错误

前两天在编译Chromium的时候,发现Gn报编码错误,具体错误如下

UnicodeEncodeError: 'gbk' codec can't encode character '\u03a2' in position 4406: illegal multibyte sequence

一个很奇怪的编码错误一个很奇怪的编码错误


然后尝试搜索这问题,有博主给出的解决方案是,在py写入文件哪一步指定编码为UTF-8,但测试后发现Gn过去了,但是后续编译仍然会报错。所以这个方案pass


好吧,自己来吧

查看报错的文件,提示返回的字符编码有问题,那追下他返回的是啥。

基于mpvue+Vant+npm快速构建微信小程序

最近要快速开发个小程序,心想着要是按微信推荐那样开发得累死,所以研究了下如何使用mpvue+Vant+npm快速构建微信小程序。


基础架子

项目地址:mpvue.com

首先用mpvue来拉一个基础的架子,这样方便我们后续集成一些其他的东西。

#安装vue-cli,有可以跳过
npm install -g vue-cli@2.9

#使用vue-cli创建mpvue项目
vue init mpvue/mpvue-quickstart 你的项目名

#安装依赖啥的
cd 你的项目目录
yran
yarn dev
Error:注意:
受微信动态增删改查 wxml 节点信息限制,某些VUE组件用不了。详细可看官方说明~

集成npm

首先在你的项目目录下,新建lib目录,用处存放第三方npm包。

真机调试下,小程序Canvas无法绘制

我在真机调试下,调试小程序Canvas,一直无法绘制,我以为是Echarts不兼容导致的。

实际上,这TMD的是微信开发者工具的问题,真机和模拟器都没问题。

微信小程序,任何涉及到原生组件的调试一定要在真机上调试!Android和IOS都试一遍,不然就是大坑!!!

Electron 实现以管理员权限自启动

Electron 其实提供的跨平台的通用开机自启动支持。

但是因为Windows系统的限制,如果您的Electron在运行时要使用管理员权限的话,这样设置的自启动会失效。

目前解决方法有两种,一种是服务,另一种是写注册表启动项

服务的方案,优点就是,在启动的时候不会弹出UAC,缺点是,需要额外的精力来维护这个服务支持组件。

所以,个人比较推荐使用写注册表的方式

缺点就是开机会弹UAC~ 不过无伤大雅

let cp = require('child_process');
// 获取可执行文件位置
const ex=process.execPath;

// 定义事件,渲染进程中直接使用

// 开启 开机自启动
ipcMain.on('openAutoStart',()=>{
    console.log('updateExe',ex)
        // 注释的是electron官方提供的自启方法
        // app.setLoginItemSettings({
        //     openAtLogin: true,//是否自启
        //     openAsHidden:false,//启动后是否显示窗体
        //     path: ex,//启动路径
        //     args: [] //启动时的参数
        // });
        cp.exec(`REG ADD HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run /v 软件名 /t REG_SZ /d "${ex}" /f`,function(err){
            console.log(err);
        });
});
// 关闭 开机自启动
ipcMain.on('closeAutoStart',()=>{
        // 注释的是electron官方提供的自启方法
        // app.setLoginItemSettings({
        //     openAtLogin: false,//是否自启
        //     openAsHidden:false,//启动后是否显示窗体
        //     path: ex,//启动路径
        //     args: [] //启动时的参数
        // });
        cp.exec("REG DELETE HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Run /v 软件名 /f",function(err){
            console.log(err);
        });
})

//检查注册表项是否存在
ipcMain.handle('checkAutoStart',async ()=>{
    return await new Promise((resolve, reject)=>{
        cp.exec("REG QUERY HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Run /v 软件名",function(err,stdout,stderr){
            resolve(stdout);
            console.log(stderr);
            console.log(err);
        });
    })
})