关于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 ...
随机推荐
- IP核的使用(Vivado中的调用,product guide的查询阅读 ,引脚的设置(位宽,个数,算法等),coe文件的初始化 )
IP核:Intellectual Property core ,即知识产权核.每个IP核可以实现特定功能,我们在设计一个东西时可以直接调用某个IP核来辅助实现功能. 存在形式:HDL语言形式,网表形式 ...
- 字符串的操作和MAth工具类
字符串的操作 常用方法 判断功能方法 equals(String s)判断两个字符串是否相同,区分大小写 equsalsignorecase(String s) 判断两个字符串是否相同,不区分大小写 ...
- 移动web开发01
pc端的支持情况.IE9以下的版本就会全军覆没.移动端就不会出现版本支持问题. 因为第一个孩子是p,但是他又是在span里面选,所以根本选不出来,报错.改成第二个孩子才可以选出来. 这样就可以选出sp ...
- 远见而明察近观若明火|Centos7.6环境基于Prometheus和Grafana结合钉钉机器人打造全时监控(预警)Docker容器服务系统
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_181 我们知道,奉行长期主义的网络公司,势必应在软件开发流程管理体系上具备规范意识,即代码提交有CR(CodeReview),功能 ...
- 跳转语句break、continue、return
1.break 语句 概念: break语句在循环中的作用是终止当前循环,在switch语句中的作用是终止switch. 示例: 输出结果: 2.continue 语句 概念: continue语句 ...
- Java开发学习(二十四)----SpringMVC设置请求映射路径
一.环境准备 创建一个Web的Maven项目 参考Java开发学习(二十三)----SpringMVC入门案例.工作流程解析及设置bean加载控制中环境准备 pom.xml添加Spring依赖 < ...
- 彻底弄懂JS中的this
首先,用一句话解释this,就是:指向执行当前函数的对象. 当前执行,理解一下,也就是说this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定.this到底指向谁?this的最终指向的 ...
- Vue 下拉框值变动事件传多个参数
在使用 Vue 进行开发时,下拉框值变动事件 @change 是很常用的. 其传参一般分为两种方式:默认传参和自定义传参. 默认传参 @change 默认会传选中项标识的参数,在传参处不用定义,在方法 ...
- Pycharm5个非常有用的技巧
PyCharm 是一款非常强大的编写 python 代码的工具.掌握一些小技巧能成倍的提升写代码的效率,本篇介绍几个经常使用的小技巧. 一.分屏展示 当你想同时看到多个文件的时候: 右击标签页: 选择 ...
- Excel 数学函数(三):RAND 和 RANDBETWEEN
Excel 主要有 RAND 和 RANDBETWEEN 这两个函数生成随机数.RAND 默认生成 0~1 的随机数:RANDBETWEEN 有两个参数:bottom 和 top,bottom 代表函 ...