2014-09-24 42 views
0

我得到了公共應用程序數據文件夾來存儲我的應用程序相關文件。例如日誌文件和ini配置文件。我使用下面的代碼:Delphi CommonAppDataFolder好像不可寫

const 
    CSIDL_COMMON_APPDATA  = $0023; 

function TSpecialFolders.GetSpecialFolder(
    const ASpecialFolderID: Integer): string; 
var 
    vSFolder : pItemIDList; 
    vSpecialPath : array[0..MAX_PATH] of Char; 
begin 
    SHGetSpecialFolderLocation(0, ASpecialFolderID, vSFolder); 
    SHGetPathFromIDList(vSFolder, vSpecialPath); 
    Result := vSpecialPath; 
end; 

function TSpecialFolders.GetCommonDocumentsFolder: string; 
begin 
    result := GetSpecialFolder( CSIDL_COMMON_DOCUMENTS); 
end;  

這適用於我的Windows 7框,並允許我的應用程序寫入文件夾和文件。

在客戶PC上(我認爲它是舊版本的Windows,因爲屏幕截圖在開始按鈕上有「開始」一詞)我的應用程序無法將文件寫入該路徑。

在我的PC返回的路徑是:

C:\ ProgramData \

我增加額外的文件夾,如下所示:

myCompany的\ MYAPP \日誌\

myCompany的\ MYAPP \ db \

將文本文件保存在這些文件夾中。

在我客戶的電腦在函數返回:

C:\ Documents和Settings \所有用戶\應用數據

我無法文本文件寫入到的目錄結構存在。

有沒有更好的功能,我應該使用,或更好的通用文件夾?


編輯爲SilverWarrior

這些都是我的客戶PC上的特殊文件夾。

AppDataFolder:C:\ Documents和Settings \管理員\應用數據 COMMONAPPDATAFOLDER:C:\ Documents和Settings \所有用戶\應用數據 CommonDocumentsFolder:C:\ Documents和Settings \所有用戶\文件 LocalAppDataFolder:C :\ Documents and Settings \ Admin \ Local Settings \ Application Data MyDocumentsFolder:C:\ Documents and Settings \ Admin \ My Documents

LocalAppDataFolder在路徑中有「Admin」,表示需要管理員權限。是對的嗎?

+0

Tey以管理員身份運行你的Delphi並重試。如果這與你的德爾福一起工作,那麼解決方案是給予程序管理權限我會告訴你以後 – 2014-09-24 16:08:56

+0

預計寫入共享文件夾的權限受到限制 – 2014-09-24 16:55:54

+0

不,@Jens,以管理員權限運行永遠不是解決方案。這是黑客,可以讓你避免*找到解決方案。這種情況下的解決方案似乎是要求客戶的系統管理員正確配置環境。另一個解決方案是使日誌和數據庫目錄可配置。但即使如此,*配置*仍然需要寫在某個地方。 – 2014-09-24 16:57:34

回答

0

好吧,用這裏的信息和來自我的客戶的PC的雙跳遠程桌面連接武裝起來,我準備與Windows權限系統做戰 - 只是發現問題是由於應用程序的ini文件是設置爲只讀。

Clickity click。問題解決了。

有關常用應用程序數據文件夾受限制的所有評論可能仍然適用,因爲客戶正在以管理員身份在XP SP3上運行其帳戶。

謝謝您的幫助。

2

問題是,您正試圖將該數據保存到適用於所有用戶的AppData文件夾中。默認情況下寫入該文件夾需要管理權限。

因此,而不是使用CSIDL_COMMON_APPDATA(AppData文件夾爲所有用戶)使用CSIDL_LOCAL_APPDATA(curent用戶AppData文件夾)。寫入curent用戶AppData文件夾不需要提升權限,所以它應該很好地工作。

3

CSIDL_COMMON_APPDATA文件夾受默認保護,只有管理員可以對其進行寫入訪問。

爲了獲得所有用戶的訪問權限,管理員必須在其中創建一個目錄並向用戶授予所需的權限。該任務通常由安裝程序爲您的應用程序完成(fi InnoSetup也有一個選項來授予這些文件夾所需的權限)。