zoukankan      html  css  js  c++  java
  • UAC 注册表 WIN64 OS 运行时主题

    首先EXE程序是32位,DelphiIDE对Project默认是启用主题的,默认情况在WIN64 OS下运行时,无管理员权限。

    WIN64 OS,默认情况下UAC是启用的。

    上述默认情况下,EXE 是无法写注册表HKEY_LOCAL_MACHINESoftware的,OpenKey 返回False(既然启用了主题,但是未要求管理员权限,那Windows就假定该程序不需要写注册表)。

    如果禁用IDE的主题选项,OpenKey返回True(可能是以前win9x的老程序,因为没有manifest文件来判断,所以返回true),但是后面实际写时,会提示出错

    ---------------------------
    Project1
    ---------------------------
    Failed to set data for 'ConsentPromptBehaviorAdmin'
    ---------------------------
    确定
    ---------------------------

    EXE加 XPManifestUAC.manifest 资源,再次编译,就会自动有盾牌,有管理员权限。

    如果在IDE里2种方式运行,都会显示 

    ---------------------------
    Error
    ---------------------------
    Unable to create process: 请求的操作需要提升。.
    ---------------------------
    OK
    ---------------------------

     如果在 文件夹窗口运行,就是显示提升对话框,提升以后。

    然后以with TRegistry.Create do 写注册表成功,但是写的PATH会 重定向到Wow6432Node下

    如果code再改一下, 用  

    with TRegistry.Create(KEY_WOW64_64KEY or KEY_ALL_ACCESS) do 红色的是必须的,只有前面的是不行的,否则OpenKey返回False。

    就能写到 PATH 对应的位置,Windows7根据情况自动确定Wow6432Node下是否同步相应的值。

    如果32位的EXE自己要 读、写注册表保存软件自身的设置,一般自动重定向到Wow6432Node也没有什么问题。

    如果32位的EXE要读、写到64PATH,那才需要KEY_WOW64_64KEY 。

     http://blog.csdn.net/xiexuan2007/article/details/38416123

    http://www.xuebuyuan.com/809036.html

    http://blog.csdn.net/educast/article/details/10168621

    http://www.bccsafe.com/?p=634

    另外,文件虚拟化

    1、Windows7兼容的程序(带manifest文件或者启用主题,但是以标准用户权限运行),比如自带的记事本,保存文件到Windows 目录C:windows,会提示

    你没有权限在此位置保存文件。

    请与管理员联系以取得相应权限。

    你想改为保存到 我的文档 文件夹中吗?

    这时,虚拟化技术并未生效。

    2、WindowsXP下的notepad.exe,复制到Windows7运行,也保存到Windows目录

    能成功保存,没有任何提示信息。

    这时,虚拟化技术起作用了。其实文件是被保存到了 用户配置文件夹下 AppData-Local——VirsualStore-原来准备保存的文件夹Windows。

    3、Windows7兼容的程序(以管理员权限运行,manifest文件里要求RunAsAdministrtor),则,可以保存数据到 Windows目录。

  • 相关阅读:
    Flutter: The getter 'futureDynamicType' was called on null.
    Android混合Flutter
    js bese64转化为blob使用FormData上传
    Flutter FractionallySizedBox 设置维度比例 而不是固定的px
    Flutter 区分开发环境和生产环境
    windows 隐藏desktop.ini文件
    Js中的reduce,fold和unfold
    精读Hooks 取数-swr源码
    WebSocket 原理浅析与实现简单聊天
    TypeScript 2.0 标记联合类型
  • 原文地址:https://www.cnblogs.com/CodeGear/p/4270108.html
Copyright © 2011-2022 走看看