程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> UAC 注冊 WIN64 OS 運行時主題,uacwin64

UAC 注冊 WIN64 OS 運行時主題,uacwin64

編輯:Delphi

UAC 注冊 WIN64 OS 運行時主題,uacwin64


首先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目錄。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved