关于HM NISEDIT在新版系统下编译并运行提示权限不足问题的解决方案
阅读原文时间:2023年07月08日阅读:1

如果你使用过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 '$\r$\n'

   FileWrite $1 '$\r$\n'

   FileWrite $1 '    $\r$\n'

   FileWrite $1 '        $\r$\n'

   FileWrite $1 '            $\r$\n'

   FileWrite $1 '                $\r$\n'

   FileWrite $1 "            $\r$\n"

   FileWrite $1 "        $\r$\n"

   FileWrite $1 "    $\r$\n"

   FileWrite $1 ">$\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同目录下运行后即可解除提权警告!

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章