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 ...
随机推荐
- trust zone之我见【转】
本文转载自:https://blog.csdn.net/hovan/article/details/42520879 老板交待任务,这个星期我都在研究trust zone的东东,之前有看过代码,但没有 ...
- 如何将一个Winform嵌入到一个Control当中
/// <summary> /// 将一个winform窗体嵌入control中 /// </summary> /// <param name="f" ...
- Educational Codeforces Round 56 (Rated for Div. 2)
涨rating啦.. 不过话说为什么有这么多数据结构题啊,难道是中国人出的? A - Dice Rolling 傻逼题,可以用一个三加一堆二或者用一堆二,那就直接.. #include<cstd ...
- 切换tab页时,tab页中的echart变形问题
本文为博主原创,未经允许,不得转载: 在两个tab页中,分别展现了两个echart图表,同样的格式与写法,但只有在默认选中的tab页中的图表显示的是正常的, 但进入另一个tab页中时,图表则产生了变形 ...
- LCA离线算法Tarjan详解
离线算法也就是需要先把所有查询给保存下来,最后一次输出结果. 离线算法是基于并查集实现的,首先就是初始化P[i] = i. 接下来对于每个点进行dfs: ①首先判断是否有与该点有关的查询,如果当前该点 ...
- Javascript库的产生和解读
javascript库的产生,增强了浏览器或javascript语言的某些机制的功能, 让业务开发人员,更专注业务逻辑,而不是机制逻辑. 比如, 0.兼容性 同样的功能函数,不同的浏览器所暴露的a ...
- vue-cli 组件运用
// components ----- helloworld.vue <script> export default { name: 'Hellowworld', props: { //接 ...
- spring boot 开发 org.springframework.context.ApplicationContextException: Unable to start web server;
Error starting ApplicationContext. To display the conditions report re-run your application with 'de ...
- 页面资源缓存 html css js
html <meta http-equiv="Expires" content="0"><meta http-equiv="Prag ...
- HTTP请求GET/POST查看工具
当你有一个http的get请求需要知道结果,可以直接在浏览器上输入,然后等待查看结果. 那如果是一个post请求呢?推荐使用一个国外工具Send HTTP Tool. 传送门:http:/ ...