关于HM NISEDIT在新版系统下编译并运行提示权限不足问题的解决方案
如果你使用过NSIS为你的项目制作过安装包,那HM nisedit一定是你绕不过去的槛,作为NSIS号称的最佳免费IDE/编辑器,功能齐全,与NSIS配合性能强悍,实至名归。只是开发作者最后版本更新在2005年已经停止,国内汉化版修修补补也仅仅坚持到2006年未再继续,时至今日,已经过去十几年,与新版操作系统和新版NSIS(3.0X)出现了各种不兼容和BUG,其中最典型的莫过于在vnsiedit中编辑好脚本后使用“编译并运行”功能,会出现请求的操作需要提升,代码740系统警告并停止执行,
经过分析,我个人认为这与新操作系统安全机制更新有直接关系,说到这里,又不得不提及windows的用户帐户控制(UAC)机制,从 Windows Vista开始,微软引入了额外的安全级别(UAC),要求在安装应用程序完成其他任务之前提示用户输入管理密码,以标准用户身份登录到 Windows Vista 的用户(Vista 的默认登录名)只能写入磁盘上的特定位置。在 Windows 7 及更高版本上,UAC 的侵入性比在 Vista 上要小的多。但这些安全机制的更改,仍然让HM VNSIEDIT这类开发应用于XP及更低系统的应用出现了各种不兼容。而当前新开发应用应对UAC控制的主要办法是为程序配置嵌入程序清单,注明执行级别!至于开发于小二十年前的VNSIEDIT,由于受当时开发环境所限,根本没有嵌入完善的程序清单,这是当前在使用中会出现需要提升权限的直接原因!
解决方案:
既然原因找到,那接下来就是解决问题了,没有程序清单,有两个解决方案,1.重新编译Vnsiedit,为其嵌入完善的程序清单。2.直接为现有的Vnsiedit配置外部清单。因为我们是在解决当前的使用bug,而不是为新系统重新改良Vnsiedit的整体兼容性,所以第二个方案就成了不二选择!
所谓程序清单,其实是一个XML文件,正常情况下会在程序或应用编译时被嵌入其中,当然,如果你不嫌弃业余或不优雅,外置清单也是可以使用的!具体到NSIS中,实战脚本如下:
#编写:水晶石
#给vnsiedit添加外部程序清单并强制优先使用
OutFile 'Nsismanifest.exe'
Section
GetTempFileName $R0
FileOpen $1 $R0 "w"
#程序清单其实是一个XML文件,这里将内容按照标准格式写入临时文件后再去更名
FileWrite $1 '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>$\r$\n'
FileWrite $1 '<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">$\r$\n'
FileWrite $1 ' <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">$\r$\n'
FileWrite $1 ' <security>$\r$\n'
FileWrite $1 ' <requestedPrivileges>$\r$\n'
FileWrite $1 ' <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>$\r$\n'
FileWrite $1 " </requestedPrivileges>$\r$\n"
FileWrite $1 " <security>$\r$\n"
FileWrite $1 " </trustInfo>$\r$\n"
FileWrite $1 "</assembly>>$\r$\n"
FileClose $1
CopyFiles /SILENT $R0 "VNISEdit.exe.manifest" ; 复制临时文件至目标文件位置并更名
Delete $R0
SetRegView 64 #注意系统重定向
#关键一步,写入参数,强制程序优先使用程序外部清单
WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide" "PreferExternalManifest" 0x00000001
SectionEnd
提示:
将编译好的程序放置在VNISEDIT.exe同目录下运行后即可解除提权警告!
关于HM NISEDIT在新版系统下编译并运行提示权限不足问题的解决方案的更多相关文章
- Mac系统下编译支持Android平台的最新X264编码器
Mac系统下编译支持Android平台的最新X264编码器 原文来自 http://www.mingjianhua.com,转载请注明出处 1.首先去官网下载最新的x264源代码,解压到任意目录 ht ...
- linux系统下修改文件夹目录权限
linux系统下修改文件夹目录权限 文件夹权限问题 Linux.Fedora.Ubuntu修改文件.文件夹权限的方法差不多.很多人开始接触Linux时都很头痛Linux的文件权限问题.这里告诉大家如何 ...
- 05 Linux系统下的用户以及用户权限管理(权限管理介绍、用户管理、常见命令介绍)
这一节我们介绍Linux的用户以及权限管理的前半段,包括:1.权限管理介绍: 2.用户管理: 3.常见命令 权限管理介绍 权限管理: 为了访问计算机资源,我们需要对其进行授权才能访问,根据什么东西来进 ...
- vs2010 在64bits系统下编译
vs只有32bits的没有64bits. 本来程序没问题,后面一直报错 LIBCMTD.lib(close.obj) : error LNK2001 LNK2019 换了各种 MD/MT/MTD 都没 ...
- 在windows XP系统下编译和使用ffmpeg
最近在做流媒体开发这一块,在服务器端,所用的live555不支持mp4,avi等视频容器格式,所以打算运用ffmpeg来进行扩展.将MP4文件先运用ffmpeg进行解析,解析成live555所支持的基 ...
- 在Win8.1系统下如何安装运行SQL Server 2005 (以及安装SQL Server 2005 Express打补丁)
在Win8.1系统下SQL Server 2005 安装失败怎么办? 需要替换两个文件及打sqlserver sp4补丁. 以下是操作过程. 按正常情况,在Win8/Win8.1系统下安装微软的SQL ...
- hadoop——在命令行下编译并运行map-reduce程序 2
hadoop map-reduce程序的编译需要依赖hadoop的jar包,我尝试javac编译map-reduce时指定-classpath的包路径,但无奈hadoop的jar分布太散乱,根据自己 ...
- DOC下编译和运行带有包的java类文件
前言: 带有包名的java类在DOC下编译可以成功,但是运行出错 错误: 找不到或无法加载主类 com.soanl.socket.MyServer D盘temp文件下有个Hello.java文件,包 ...
- Linux 系统下 centOS 7 ipconfig 提示没有安装
首先更正一下,在Linux系统下,查看IP地址,指令是ifconfig 没有root权限情况下,安装指令为 sudo yum -y install net-tool 有root权限的话,直接执行 yu ...
随机推荐
- typescript关于postgres数据库的API封装
文章结构 1 新建 postgres.ts 文件 2 配置文件说明 3 依赖引用说明 4 API使用示例 1 新建 postgres.ts 文件,代码如下: imp ...
- CF665B Shopping
CF665B Shopping 题目描述 Ayush is a cashier at the shopping center. Recently his department has started ...
- ShardingSphere数据库读写分离
码农在囧途 最近这段时间来经历了太多东西,无论是个人的压力还是个人和团队失误所带来的损失,都太多,被骂了很多,也被检讨,甚至一些不方便说的东西都经历了,不过还好,一切都得到了解决,无论好坏,这对于个人 ...
- 汽车锂电池行业为啥会选择钡铼BL200系列Profinet分布式IO
近年来,全球新能源汽车的蓬勃发展促进了锂电池行业的发展.随着锂电池标准化程度的提高,电池和模块规格的标准化是未来的发展趋势,也促进了自动化模块生产线的发展. 锂电池模块生产线通过涂胶-电池堆叠-组装- ...
- LyScript 实现对内存堆栈扫描
LyScript插件中提供了三种基本的堆栈操作方法,其中push_stack用于入栈,pop_stack用于出栈,而最有用的是peek_stack函数,该函数可用于检查指定堆栈位置处的内存参数,利用这 ...
- show create table底层流程跟踪
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 导语 SHOW CREATE TABLE语句用于为指定表/视图显示创建的语句,本文将简要描述如何在MySQL源码里跟踪和学 ...
- DS二叉树——二叉树之数组存储
题目描述 二叉树可以采用数组的方法进行存储,把数组中的数据依次自上而下,自左至右存储到二叉树结点中,一般二叉树与完全二叉树对比,比完全二叉树缺少的结点就在数组中用0来表示.,如下图所示 从上图可以看出 ...
- MySQL查询关键数据方法
MySQL查询关键数据方法 操作表的SQL语句补充 1.修改表名 alter table 表名 reame 新表名: 2.新增字段名 alter table 表名 add 字段名 字段类型(数字) 约 ...
- 理想汽车 x JuiceFS:从 Hadoop 到云原生的演进与思考
理想汽车在 Hadoop 时代的技术架构 首先简单回顾下大数据技术的发展,基于我个人的理解,将大数据的发展分了4个时期: 第一个时期: 2006 年到 2008 年.2008 年左右,Hadoop 成 ...
- 文心大模型api使用
文心大模型api使用 首先,我们要获取硅谷社区的连个key 复制两个api备用 获取Access Token 获取access_token示例代码 之后就会输出 作文创作 作文创作:作文创作接口基于文 ...