在 Vista 開啟 UAC 的狀況下 , 假設我有一支小程式 , 上面放兩個按鈕 , 一個按鈕按下去要產生一個文字檔的檔案到 C:\Program Files 底下(應該會無法成功 , 因為檔案會被轉移到其他目錄) 另外一個按鈕按下去一樣要產生一個文字檔的檔案到 C:\Program Files 底下 , 但透過某一個方法(或者有某個Api函數) , 卻能夠成功的在該目錄底下產生文件。注意需求:我是想通過某种方法或者說執行一個動作來達到這個目的,而不是通過添加manifest來使整個程序都有這個權限(其實這個方法之前有測試過,不穩定,所以放棄了)。

解决方案 »

  1.   

    在開啓uac的情況下,如要產生文字檔,檔案會被放到virtualstore目錄下
      

  2.   

    刚准备说添加manifest的……
    我极度怀疑那个API是内核级的API而不是用户态的
    例如NtCreatFile这类
      

  3.   

    目前呢是有辦法在uac開啓的情況下,將一個受限的文件夾,如c:\program files,開放讀寫,比如優化大師,在右鍵可以添加“提升管理員權限”的東東,不知哪位對此了解的?
      

  4.   

    据说在UAC开启的状态下杀掉explorer进程然后重新启动explorer就行了,需要调用pskill
    具体可以看看这里
    http://zhangzhi124.blog.hexun.com/9300027_d.html
      

  5.   

    其實提這個問題是想解決說,不想讓應用程序產生的檔案被轉到virtualstore,而是直接產生到程序所在文件夾---program files。當然在管理員權限下,且不開啓uac,則可解決此問題。但不能要求每個客戶都這樣吧?
      

  6.   

    所以 gyk120提供的方法即使可以成功,但當用戶在執行某個操作時,可能需要讀寫program files,這時出現explorer 重起,會嚇人的  :)
      

  7.   

    ……那我恐怕没什么太好的办法了
    http://msdn.microsoft.com/zh-cn/magazine/cc163486.aspx
    MSDN上给出了解释,但是看得人云里雾里的……
      

  8.   

    对了,你用的添加manifest是怎么添加的?用外置的有时候可能会出问题,用windows SDK 的mt.exe把manifest添加进去会出问题吗?
      

  9.   

    把manifest编译成资源文件,然后编译EXE时包含进去就可以了,我做过。可去www.Delphibbs.com搜索
      

  10.   

    to gyk120:我添加manifest,先编译为res,然后再在exe中引用。根据您提供的http://msdn.microsoft.com/zh-cn/magazine/cc163486.aspx ,在开启uac的情况下,如果想要提升程序权限,也就只有改变程序的权限token,目前的解决办法除了添加manifest,还有一种就是重启explorer并改变其权限token。
       在上面的url中,有介绍,在进程运行时,是无法改变其权限token。所以,可能我这个需求是无法实现的