You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Inno Setup在新版Win10/2019/21H2中生效程序管理员运行设置

关于VB6程序在Win10下UAC与注册表重定向的问题

核心现象

  • 尝试过注册表设置、修改可执行文件字节的方法,在最新Windows 10版本均无效
  • HKLM和HKCU中已添加程序“以管理员运行”的注册表条目,但只有手动右键选择「以管理员运行」时,程序才能正确读取HKLM项;直接启动时无法找到目标注册表项
  • 给注册表值添加~符号后,出现「此键已与集合中的元素关联」的读取异常
  • 手动勾选文件属性的「以管理员运行」复选框后程序可正常运行,此时注册表值显示为~ RUNASADMIN;但通过脚本写入的注册表设置(无~)无法自动勾选该复选框,且该设置在2016年左右的Win10版本可正常工作

测试细节与发现

  • 目标程序为2000年代初的VB6程序,无内置app.manifest文件
  • 首次运行时无虚拟存储(Virtual Store),程序可读取HKLM项;但一旦修改设置写入Virtual Store后,后续启动仅读取Virtual Store项,完全忽略HKLM项
  • 即使通过AppCompatFlags设置runasadmin且图标显示UAC盾牌,删除Virtual Store项后程序会重新读取HKLM-WOW6432Node,但写入操作仍会指向Virtual Store
  • 仅右键选择「以管理员运行」时,程序才能同时正确读写HKLM-WOW6432Node项
  • 两个签名程序表现不一致:一个读取Virtual Store,另一个读取HKLM-WOW6432Node,推测可能是管理员运行标识过多或WINXPSP3兼容模式导致重定向

已尝试的解决方案

1. Inno Setup注册表配置

Root: HKCU; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; ValueType: multisz; \ 
ValueName: "{#InstallFolder}\myapp.exe"; ValueData: "RUNASADMIN"; \
            Flags: uninsdeletekeyifempty uninsdeletevalue; MinVersion: 0,6.2
  • 同步尝试写入HKLM路径,未生效

2. 修改可执行文件字节的方法

Stream.ReadBuffer(Buffer, 1);
Buffer[1] := Chr(Ord(Buffer[1]) or $20);
Stream.Seek(-1, soFromCurrent);
Stream.WriteBuffer(Buffer, 1);
  • 该方法在最新Win10版本无效

待确认疑问

注册表中Compatibility Assistant-Store组存在程序引用及94字节二进制数据,是否需要对该部分进行操作?

内容的提问来源于stack exchange,提问作者Ryan Buton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 08:38:17