关于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 ...
随机推荐
- 科学计算库Numpy基础&提升(理解+重要函数讲解)
Intro 对于同样的数值计算任务,使用numpy比直接编写python代码实现 优点: 代码更简洁: numpy直接以数组.矩阵为粒度计算并且支持大量的数学函数,而python需要用for循环从底层 ...
- 第一天python3 封装和解构
封装 将多个值使用逗号分割,组合在一起:本质上,返回一个元组,只是省略了小括号:python特有语法,被很多语言学习和借鉴;比如javascript:t1=(1,2) 定义为元组:t2=1,2 将1和 ...
- RSA算法概述
RSA算法的概述(个人理解,欢迎纠正) RSA是一种基于公钥密码体制的优秀加密算法,1978年由美国(MIT)的李维斯特(Rivest).沙米尔(Shamir).艾德曼(Adleman)提的.RSA算 ...
- BufferedInputStream字节缓冲输入流
package com.yang.Test.BufferedStudy; import java.io.BufferedInputStream; import java.io.FileInputStr ...
- devops-4:Jenkins基于k8s cloud和docker cloud动态增减节点
Jenkins管理动态节点 上文介绍Jenkins增加静态agent的步骤,除了静态增加外,还有动态管理的功能,两者最大的差异在于动态可以在有job运行时,临时加入一个agent到jenkins ma ...
- SDK和API的直接区别
狭义的说法,在实际工作中, 如果对方需要你提供一个api,是指一个工程提供给另外一个工程的接口(一般是基于http协议). 如果对方需要你提供一个sdk,是指基于对方工程的编程语言,提供一个代码包.在 ...
- 技术分享 | Update更新慢、死锁等问题的排查思路分享
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 一.简介 在开始排错之前我们需要知道 Update 在 MySQL 中的生命周期 ...
- 发布 .NET MAUI / MAUI Blazor 应用 (1) - Windows
发布用于Windows的 .NET MAUI 应用 打开 PowerShell 终端 , 命令行进入工程目录,以我的例子工程为例, cd BlazorMaui BlazorMaui 替换为你自己工程名 ...
- thinkphp 5 及一下或php项目里实现模糊查询
想在thinkPHP或者PHP项目实现模糊查询怎么实现呢? 今天在网上搜了一下用 mysql里的 like 就可以实现 怎么用呢? 看代码: 错误用法: where('title','like',$s ...
- Java SE 15 新增特性
Java SE 15 新增特性 作者:Grey 原文地址:Java SE 15 新增特性 源码 源仓库: Github:java_new_features 镜像仓库: GitCode:java_new ...