2011-03-05 85 views
2

我有存儲數據(original.dat)的應用程序,以文件夾C:\ ProgramData (I使用的SHGetFolderPath()與CSIDL_COMMON_APPDATA的CSIDL訪問該文件夾。)遠景programdata命令行訪問

它還需要使用參數 調用命令行執行文件(myexecute.exe)c:\ program files \ myname \ appname \ myexecute.exe original.dat outputfile.dat(outputfile.dat將位於C:\ ProgramData中) 它工作XP,但它報告錯誤「訪問被拒絕」在Vista上。 它看起來像是在文件夾中創建outputfile.dat的過程。

歡迎任何評論

感謝

馬克

+0

如果您需要特定的指導,那麼會產生錯誤的代碼片段真的會有所幫助。另外,什麼版本的德爾福? – Argalatyr 2011-03-05 05:30:30

+0

沒有必要在這裏的代碼,只需要停止寫入到您沒有寫訪問權限的文件夾,正如Ken所說 – 2011-03-05 08:02:07

+0

在任何情況下,vista中是否存在無法訪問「訪問被拒絕」的文件夾? – monsabre 2011-03-05 23:40:35

回答

7

CSIDL_COMMON_APPDATA是爲所有用戶,並且是不可寫的非管理員用戶,因爲UAC的。它在安裝過程中對管理員可寫,但不應在之後使用。

您應該使用CSIDL_APPDATA代替當前用戶的數據。

+2

+1。 [某些Microsoft使用CSIDL_COMMON_APPDATA的指導原則](http://msdn.microsoft.com/zh-cn/library/ms995853.aspx)。我查了它,因爲它對我來說並不直觀。該鏈接表示:'默認情況下,該位置對於普通(非管理員,非電力)用戶是隻讀的。如果應用程序要求普通用戶具有對CSIDL_COMMON_APPDATA的應用程序特定子目錄的寫入權限,則應用程序必須在應用程序安裝期間顯式修改該子目錄上的安全性。 – 2011-03-05 06:42:51

+0

CSIDL_APPDATA,同樣的結果,我估計大部分與Vista兼容的問題都與此有關 – monsabre 2011-03-05 23:27:18

+0

我只是想知道在安裝我的應用程序時是否需要做些什麼(我使用Inno Setup,也許我需要在Inno腳本中做些什麼) – monsabre 2011-03-05 23:30:26