当前位置: 首页 > news >正文

建设中的网站备案期间做什沈阳网站制作公司排名

建设中的网站备案期间做什,沈阳网站制作公司排名,仿网站制作教学视频,做网站定金交多少合适大家有任何想法,都可以联系博主沟通。 本系列为实战文章,最终实现的桌面工具软件,获取方式:百度网盘地址:https://pan.baidu.com/s/1yrl0jYpti7QCn8CHBRT2lw?pwd1234 正文开始 前言一、提升electron运行权限的三种方…

大家有任何想法,都可以联系博主沟通。

本系列为实战文章,最终实现的桌面工具软件,获取方式:百度网盘地址:https://pan.baidu.com/s/1yrl0jYpti7QCn8CHBRT2lw?pwd=1234


正文开始

  • 前言
  • 一、提升electron运行权限的三种方式
  • 二、何种场景可能需要提升权限
  • 三、具体实现
    • 3.1 检查权限
    • 3.2重启electron软件
    • 3.3服务管理
  • 四、总结


前言

在桌面软件使用场景,有很多需要管理员权限的功能,比如说操作注册表、操作服务等。博主前面有一篇文章是介绍,如何使用electron-builder打包软件,设置安装electron软件时,主动提升权限。

这样确实可以解决一部分问题,但是很多用户内心是反感在安装阶段,就为软件赋予管理员权限的。这就要求我们的软件在提升权限方面,更加灵活。

除了在electron-builder的配置文件中配置:“allowElevation”:true,我们还可以通过其他方式,实现普通功能以正常权限启动,特殊功能需要管理员权限时,提醒用户重启软件。


一、提升electron运行权限的三种方式

  1. electron-builder中配置"allowElevation":true。具体实现方案参考,请搜索关键字“electron-builder允许安装时请求提升权限 中二少年学编程”。此方式,不能为绿色版软件提供支撑,也易造成用户安装软件时的反感。
  2. 每次启动electron软件时,右键选择以管理员方式启动。此方式完全借助用户行为提升软件权限,对用户十分不友好。
  3. 当需要提升权限时,提醒用户当前用户管理权限不足,并便捷地以管理员权限重启软件。本文主要介绍此方式。

二、何种场景可能需要提升权限

修改注册表、修改系统级环境变量、修改系统级的配置文件、管理服务等场景下,都可能需要更高等级的用户权限——管理员权限。

本文以管理服务(windows环境)为例,详细介绍,如何便捷地为electron提升运行权限。

需求描述:

  1. 开发服务管理功能,将jar包以服务的形式运行,并提供创建服务、启动服务、停止服务、删除服务等功能。如图:
    在这里插入图片描述
    2.创建服务、删除服务、启动服务等功能需要管理员权限,当检测到当前electron软件运行权限不足,则重启软件,提升权限,如图:
    在这里插入图片描述
    点击重启后,会弹出一个系统提示框,提示是否以管理员权限重启软件。

3.重启后,重新创建服务,则创建成功,在服务列表查看服务是否存在,验证效果。如图:

在这里插入图片描述
在这里插入图片描述
出现名称为“222”的服务,说明创建成功。

三、具体实现

3.1 检查权限

windows环境检查当前用户权限是否为管理员权限,有很多种方式,比较常用的是输入命令行:net session。如果报错,则为普通权限,不报错则为管理员权限。这个方案在大多数场景下都可用。

net session检查权限的方式有一个弊端,就是要求必须开启了Server服务。如果禁用Server:
在这里插入图片描述
禁用server后,无论是否以管理员权限运行命令行,都会报错——没有启动服务器服务:
在这里插入图片描述
而某些安全要求比较高的windows服务器,是不允许开通server服务的,所以上面的方法只能被舍弃。如果读者确定自己开发的软件不会应用与服务器,或者运行环境不会强制要求关闭server服务,则完全可以使用上面的命令行检查用户权限。

另一种比较稳定的判断权限方法是:openfiles。在普通用户权限和管理员权限,分别运行openfiles,如图:在这里插入图片描述

在这里插入图片描述
可以得出结论,如果运行命令行报错,则是普通权限,如果没有报错,则为管理员权限。

所以,我们判断权限的代码如下:

/*** 判断是否是管理员权限*/
const isAdmin=exports.isAdmin=()=>{return new Promise((resolve) => {if (process.platform === 'win32') {exec('openfiles', (err) => {if (err) {resolve(false); // 不是管理员} else {resolve(true); // 是管理员}});}});
}

3.2重启electron软件

当发现当前环境不是管理员权限,我们需要以管理员权限,重启electron软件。

核心方案是:使用 PowerShell 提升权限重启应用:Start-Process -FilePath 你的electron可执行程序地址 -ArgumentList 你的参数 -Verb RunAs

代码如下:

/*** 提升权限,重启应用软件*/
exports.restartAppAsAdmin=async ()=>{if (process.platform === 'win32') {const appPath = app.getPath('exe'); // 获取当前应用的可执行文件路径const args = process.argv.slice(1); // 获取当前应用的启动参数// 将参数转换为 PowerShell 的字符串数组格式const argsString = args.map(arg => `"${arg}"`).join(',');console.log(argsString);const ArgumentList=argsString?` -ArgumentList ${argsString}`:''// Windows:使用 PowerShell 提升权限重启应用const command = `Start-Process -FilePath "${appPath}" ${ArgumentList} -Verb RunAs`;exec(`powershell -Command "${command}"`, (err) => {if (err) {console.error('重启失败:',Buffer.from(err.message, 'binary').toString('utf16le') );return {success:false,msg:Buffer.from(err.message, 'binary').toString('utf16le')}} else {console.log('重启成功');app.quit(); // 退出当前应用return true}});}
}

上面就是重启应用的全部代码,关键代码都写了注释,读者请自行研读。

3.3服务管理

对服务的增删改查等管理功能,是基于nssm实现的,这部分并不难,也不是本文内容的重点,所以仅仅粘贴一下代码,读者有需要可自行参阅。

/*** 为可执行的组件创建服务*/
const path = require('path')
const {spawn: spawn} = require('child_process')class ServiceOperate {constructor(option = {}) {this.comPath=option.comPath || ''this.serviceName=option.serviceName || ''this.spawnCommand = path.join(process.env.ElectronPlugins, 'nssm/win64/nssm')this.serviceCmdArgs = null}init(option){this.comPath = option.comPaththis.serviceName = option.serviceNamereturn this}/*** 通过服务名和运行命令,创建服务*/createService() {// 构建NSSM命令// this.serviceCmdArgs = `install ${this.serviceName} "javaw -jar ${this.comPath}"`this.serviceCmdArgs = ['install',this.serviceName,'F:\\cnde-deploy\\jdk1.8.0_202\\jre\\bin\\javaw','-jar',this.comPath]// 判断是否以管理员身份运行return this.execute(this.spawnCommand,this.serviceCmdArgs)}/*** 根据服务名删除服务*/removeService() {this.serviceCmdArgs = ['remove',this.serviceName,'confirm']return this.execute(this.spawnCommand,this.serviceCmdArgs)}/*** 根据服务名查询服务*/checkService() {const spawnCommand = 'sc'this.serviceCmdArgs = ['query',this.serviceName]return this.execute(spawnCommand,this.serviceCmdArgs).then(res=>{const isRunning = res.stdout.includes('RUNNING')return {...res,isRunning}}).catch(err=>{return err})}/*** 根据服务名启动服务*/startService() {this.serviceCmdArgs = ['start',this.serviceName]return this.execute(this.spawnCommand,this.serviceCmdArgs)}/*** 根据服务名停止服务*/stopService(){const spawnCommand = 'sc'this.serviceCmdArgs = ['stop',this.serviceName]return this.execute(spawnCommand,this.serviceCmdArgs)}execute(spawnCommand,serviceCmdArgs) {return new Promise((resolve, reject) => {if(!this.serviceName){return reject({success:false,code: 1, stdout: '', stderr: '服务名称不能为空'})}const child = spawn(spawnCommand, serviceCmdArgs);let stdoutData = '';let stderrData = '';child.stdout.on('data', (data) => {console.log('stdout:', data.toString());stdoutData += data.toString()});child.stderr.on('data', (data) => {console.log('stderr:', data.toString());stderrData +=Buffer.from(data, 'binary').toString('utf16le')});child.on('close', (code) => {console.log(`Child process exited with code ${code} ${child.pid}`);if (code === 0) {resolve({success:!stderrData,stdout: stdoutData, stderr: stderrData});} else {console.log(stderrData)reject({success:false,code, stdout: stdoutData, stderr: stderrData});}});})}}
module.exports=ServiceOperate

关于服务的管理功能比较小众,如果私信的同学多了,可能会重开一篇文章介绍。

四、总结

electron软件提升权限为管理员权限有两种方式:

  1. electron-builder配置allowElevation参数,在软件安装时提升权限。
  2. 在软件使用时,通过powershell运行命令行,以管理员权限重启应用。

在软件使用时,提升软件权限的三步:

  1. 通过命令行,判断当前权限是否为管理员权限。
  2. 通过powershell提升权限,重启软件。

本部分仍可优化的功能点:
提升权限重启软件时,可以通过传递参数,告知新启动的软件一些关键信息:比如重启前页面的一些缓存信息、重启前软件的路由信息等。

http://www.dtcms.com/a/497569.html

相关文章:

  • 如何不用域名也可以做网站源服务器发生5xx错误
  • 宁波建网站哪家好用点做虚假彩票网站判几年
  • wordpress 阅读全文seo排名优化方法
  • 南阳做网站优化公司微信商城小程序怎么做
  • 建筑工程网站搭建购物网站导航素材代码
  • 如何自己开一个网站深圳 公司网站设计
  • asp.net 大型网站开发中国建筑在线网
  • DPO数学原理
  • 门户网站样式高级软件开发培训班
  • 网站建设开票名称怎么写广告创意设计视频
  • 购物网站二级店铺mvc网络改造实施方案
  • 网站开发的发展历史及趋势货源网
  • 网站开发成本如何账务处理英文外贸网站 php源码
  • 麟游住房和城市建设局网站做调像什么网站找活
  • wordpress建站简单吗软件公司做网站
  • 石家庄网站建设销售电话seo黑帽排名
  • 市北区大型网站建设wordpress js广告
  • 网站着陆率济南软件公司排名
  • 怎样建网站WordPress安装两个seo插件
  • 赞叹天河网站建设公司参考消息电子版手机版
  • 基于 STM32CubeMX 实现按键改变 FreeRTOS 多任务的状态( STM32F103ZET6)
  • 电影感人文街拍摄影后期Lr调色教程,,手机滤镜PS+Lightroom预设下载!
  • 网站网址ip查询seo优化系统哪个好
  • 个人如何在企业网站做实名认证移动应用开发课程
  • 专业网站设计服务好joomla 做的网站
  • 中山电子商务网站建设珠海响应式网站建设费用
  • DDS的IP核使用
  • 婚纱照网站制作公司网站备案条件
  • 网站建设设计官网近期新闻热点大事件
  • wordpress改企业网站那个网站销售好