当前位置:   article > 正文

HM VNISEDIT在新版系统下编译并运行提示权限不足问题的解决方案_怎么进入hm vnisedit

怎么进入hm vnisedit

如果你使用过NSIS为你的项目制作过安装包,那HM vnisedit一定是你绕不过去的槛,作为NSIS号称的最佳免费IDE/编辑器,功能齐全,与NSIS配合性能强悍,实至名归。只是开发作者最后版本更新在2005年已经停止,国内汉化版修修补补也仅仅坚持到2006年未再继续,时至今日,已经过去十几年,与新版操作系统和新版NSIS(3.0X)出现了各种不兼容和BUG,其中最典型的莫过于在vnisedit中编辑好脚本后使用“编译并运行”功能,会出现请求的操作需要提升,代码740系统警告并停止执行,

经过分析,我个人认为这与新操作系统安全机制更新有直接关系,说到这里,又不得不提及windows的用户帐户控制(UAC)机制,从 Windows Vista开始,微软引入了额外的安全级别(UAC),要求在安装应用程序完成其他任务之前提示用户输入管理密码,以标准用户身份登录到 Windows Vista 的用户(Vista 的默认登录名)只能写入磁盘上的特定位置。在 Windows 7 及更高版本上,UAC 的侵入性比在 Vista 上要小的多。但这些安全机制的更改,仍然让HM VNISEDIT这类开发应用于XP及更低系统的应用出现了各种不兼容。而当前新开发应用应对UAC控制的主要办法是为程序配置嵌入程序清单,注明执行级别!至于开发于小二十年前的VNISEDIT,由于受当时开发环境所限,根本没有嵌入完善的程序清单,这是当前在使用中会出现需要提升权限的直接原因!

解决方案:

既然原因找到,那接下来就是解决问题了,没有程序清单,有两个解决方案,1.重新编译VnISedit,为其嵌入完善的程序清单。2.直接为现有的VNISedit配置外部清单。因为我们是在解决当前的使用bug,而不是为新系统重新改良VnISedit的整体兼容性,所以第二个方案就成了不二选择!

所谓程序清单,其实是一个XML文件,正常情况下会在程序或应用编译时被嵌入其中,当然,如果你不嫌弃业余或不优雅,外置清单也是可以使用的!具体到NSIS中,实战脚本如下:

  1. #编写:水晶石
  2. #给vnsiedit添加外部程序清单并强制优先使用
  3. OutFile 'Nsistest.exe'
  4. Section
  5. GetTempFileName $R0
  6. FileOpen $1 $R0 "w"
  7. #程序清单其实是一个XML文件,这里将内容按照标准格式写入临时文件后再去更名
  8. FileWrite $1 '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>$\r$\n'
  9. FileWrite $1 '<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">$\r$\n'
  10. FileWrite $1 ' <dependency>$\r$\n'
  11. FileWrite $1 ' <dependentAssembly>$\r$\n'
  12. FileWrite $1 ' <assemblyIdentity$\r$\n'
  13. FileWrite $1 ' type="win32"$\r$\n'
  14. FileWrite $1 ' name="Microsoft.Windows.Common-Controls"$\r$\n'
  15. FileWrite $1 ' version="6.0.0.0"$\r$\n'
  16. FileWrite $1 ' publicKeyToken="6595b64144ccf1df"$\r$\n'
  17. FileWrite $1 ' language="*"$\r$\n'
  18. FileWrite $1 ' processorArchitecture="*"/>$\r$\n'
  19. FileWrite $1 ' </dependentAssembly>$\r$\n'
  20. FileWrite $1 " </dependency>$\r$\n"
  21. FileWrite $1 ' <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">$\r$\n'
  22. FileWrite $1 " <security>$\r$\n"
  23. FileWrite $1 " <requestedPrivileges>$\r$\n"
  24. FileWrite $1 ' <requestedExecutionLevel$\r$\n'
  25. FileWrite $1 ' level="requireAdministrator"$\r$\n'
  26. FileWrite $1 ' uiAccess="false"/>$\r$\n'
  27. FileWrite $1 " </requestedPrivileges>$\r$\n"
  28. FileWrite $1 ' </security>$\r$\n'
  29. FileWrite $1 " </trustInfo>$\r$\n"
  30. FileWrite $1 "</assembly>$\r$\n"
  31. FileClose $1
  32. CopyFiles /SILENT $R0 "VNISEdit.exe.manifest" ; 复制临时文件至目标文件位置并更名
  33. Delete $R0
  34. SetRegView 64 #注意系统重定向
  35. #关键一步,写入参数,强制程序优先使用程序外部清单
  36. WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide" "PreferExternalManifest" 0x00000001
  37. SectionEnd

提示

将编译好的程序放置在VNISEDIT.exe同目录下运行后即可解除提权警告!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/496743
推荐阅读
相关标签
  

闽ICP备14008679号