[英]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.