簡體   English   中英

啟用UAC后,如何在VC ++ 6.0中創建文件?

[英]How do I create a file in VC++ 6.0 when UAC is on?

當UAC啟用但沒有以管理員身份運行時,如何在C ++中創建文件?

我正在嘗試在以下路徑中創建文本文件:當Vista的UAC處於打開狀態時,在VC ++ 6.0中為“ C:\\ Programdata \\ Desktop”。 但是, Createfile(...)失敗,顯示“權限被拒絕”。

當我使用“以管理員身份運行”運行示例應用程序時,它可以工作。 但是我的示例應用程序不應“以管理員身份運行”。

打開UAC時,是否有任何API可以授予上述路徑的權限?

示例代碼:const nSize = 100; CStdioFile文件; CFileException obFileExp; CString csFilePath(_T(“ C:\\ ProgramData \\ Desktop \\ sample.txt”));

if (!file.Open( csFilePath , CFile::modeCreate | CFile::modeWrite ,&obFileExp ) )
{
    // opening of file failed  
    TCHAR szErr[nSize];
    obFileExp.GetErrorMessage(szErr,nSize);
    AfxMessageBox(szErr);
    return ;
}  

file.WriteString( "welcome" );

file.Close( );

注意:UAC應該打開,並且VC ++ 6.0不應以管理員身份運行

C:\\ ProgramData \\ Desktop是C:\\ Users \\ Public \\ Desktop的別名-C:\\ Users \\ Public \\ Desktop是所有用戶共享的桌面,旨在由系統管理員配置。

啟用UAC后,訪客,用戶組成員或管理員組的非提升成員無法在不破壞Windows整個安全模型的情況下在共享桌面上創建文件或文件夾。

例如,有可能使用管理員帳戶-在應用安裝過程中提升UAC期間-添加訪問控制列表條目,向用戶組的成員授予對Public \\子文件夾或文件的某種創建/寫入控制權限桌面。

因此,除非您的“示例程序”試圖演示一種從未提升的帳戶在共享位置寫入文件的方法,否則最好在用戶自己的桌面上創建文件-c:\\ Users \\ YourUserAccount \\ Desktop-您檢索到的路徑當然是使用適當的(SHGetSpecialFolderLocation)API!

如果不允許您在某處寫東西,則絕對不允許。 如果您能以某種方式做到這一點,那將是黑客

話雖如此,我知道的最后一件事是允許應用程序在Vista中寫入programdata。 那就是應該做的。 存儲程序的數據。 但是我不確定其中的桌面文件夾。 據我所知,在Vista中沒有這樣的標准文件夾。

請您詳細說明一下您要保存在該文件夾中的內容嗎?

據我所知,如果UAC已打開&您需要寫入C:\\ Program Files“,這是一個受限制的文件夾。您需要具有管理員權限。

沒有解決方法。 UAC最多可以對您的應用程序進行虛擬化,從而使您的應用程序認為將其寫入C:\\ Program Files,但實際上,它將被寫入%UserProfile%中存在的虛擬文件夾中。

可以使嵌入的清單(使用外部清單工具)的權限設置為“ RequireAdministrator”,而不是使用戶始終右鍵單擊-> Run As。 因此,無論何時執行您的應用程序,系統都會提示用戶是否允許提升您的應用程序。

如果必須寫入programdata,則不需要管理員權限。

看一下清單文件機制

您可以在exe文件中嵌入清單,也可以有一個單獨的清單文件來控制權限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM