UAC 注册表 WIN64 OS 运行时主题
首先EXE程序是32位,DelphiIDE对Project默认是启用主题的,默认情况在WIN64 OS下运行时,无管理员权限。
WIN64 OS,默认情况下UAC是启用的。
上述默认情况下,EXE 是无法写注册表HKEY_LOCAL_MACHINE\Software的,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目录。
UAC 注册表 WIN64 OS 运行时主题的更多相关文章
- Installshield 打包安装程序时写入注册表,及运行bat文件
一.写入注册表 1. 打开project assistant –> Project Registry 可以像注册表里一样操作,其中[INSTALLDIR]是指的安装路径 二. 运行bat文件 ...
- 64 位 Windows 平台开发注意要点之注册表重定向
Window 系统错误代码 ERROR_SUCCESS,本博客中一律使用 NO_ERROR 代替.虽然 ERROR_SUCCESS 与 NO_ERROR 是完全等价的,都代表成功,但是后者却和其他错误 ...
- ArcGIS AddIN开发之COM对象写入注册表
做一个交互式绘制文字的工具,希望这次设置的Symbol,下次打开ArcMap时自动调用这个Symbol,并支持对其进行修改. 解决方法是将这个Symbol写入注册表中,每次自动读取上一次设置的Symb ...
- asp.net中通过注册表来检测是否安装Office(迅雷/QQ是否已安装)
原文 asp.net中通过注册表来检测是否安装Office(迅雷/QQ是否已安装) 检测Office是否安装以及获取安装 路径 及安装版本 代码如下 复制代码 #region 检测Office是否 ...
- C#注册表操作类--完整优化版
using System; using System.Collections.Generic; using System.Text; using Microsoft.Win32; namespace ...
- 将字符串存储到注册表中,长度一定是 strlen(text) + 1
参考:https://docs.microsoft.com/en-us/windows/desktop/sysinfo/registry-value-types 将字符串存储到注册表中,长度参数一定要 ...
- Java虚拟机运行时内存区域简析
figure:first-child { margin-top: -20px; } #write ol, #write ul { position: relative; } img { max-wid ...
- [二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义
前言简介 class文件是源代码经过编译后的一种平台中立的格式 里面包含了虚拟机运行所需要的所有信息,相当于 JVM的机器语言 JVM全称是Java Virtual Machine ,既然是虚拟机, ...
- [SQL]卸载数据库清理注册表方法regedit
.打开注册表. 开始——运行——regedit——确定 .然后找到下面的文件夹,删除掉: HKEY_CURRENT_USER\ Software\ Microsoft\ Microsoft SQL S ...
随机推荐
- BZOJ 2434 阿狸的打字机(fail树)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2434 题意:阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28 ...
- Python3基础 list sort 从小(大)到大(小)排序
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- JavaScript 开闭原则OCP
代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...
- MOOC视频学习
mooc地址 2018/2/6-2/7学习计划: 学习第一周(1.1-1.4)内容. 学习笔记 2018/2/8-2/9学习计划: 学习第二周(1.5.2.1-2.5)内容. 学习笔记 2018/2/ ...
- 桌面共享UDP组播实现
组播(Multicast)传输:在发送者和每一接收者之间实现点对多点网络连接.如果一台发送者同时给多个的接收者传输相同的数据,也只需复制一份的相同数据包.它提高了数据传送效率.减少了骨干网络出现拥塞的 ...
- Ubuntu 14.04 python3.6 安装
参考 how-do-i-install-python-3-6-using-apt-get Ubuntu 14.04 python3.6 安装 sudo add-apt-repository ppa:j ...
- 基于贝叶斯优化的超参数tuning
https://arimo.com/data-science/2016/bayesian-optimization-hyperparameter-tuning/ 贝叶斯优化:使用高斯过程作为代理函数, ...
- linux 多进程fork
对于父进程,fork函数返回了子程序的进程号,而对于子程序,fork函数则返回零,这样,对于程序,只要判定fork函数的返回值,就知道自己是处于父进程还是子进程中.
- rostopic 命令
rostopic bw display bandwidth used by topic// rostopic delay display delay for topic which has heade ...
- c++ 二分法查找(binary_search)
#include <iostream> // cout #include <algorithm> // binary_search, sort #include <vec ...