2011-01-05 62 views
0

我有一箇舊的C++應用程序需要修改才能使用windows 7. 問題在於創建一個新文件夾並保存一個文件在該文件夾中。此文件夾應創建於在windows 7中創建一個文件夾和文件在c: program files myApp data中

c:\ program files \ myApp \ data \ newFolder。

這是我函數用於創建新的文件夾,並得到錯誤:

if(!CreateDirectory(pathSamples,NULL)) //Throw Error 
{ 
    DWORD errorcode = GetLastError(); 
    LPVOID lpMsgBuf; 

    FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, 
     NULL, errorcode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL); 

    MessageBox(NULL, (LPCTSTR)lpMsgBuf, TEXT("Error"), MB_OK); 
} 

在XP這個工作,但在Windows 7不會。如果我以管理員身份運行應用程序而不是創建文件夾,否則會拋出「訪問被拒絕」錯誤。

我的問題是以下幾點:
是否有更改代碼,以便該文件夾可在「程序文件」創建一個選項NAD的文件可以保存此文件夾中?

PS我看到this thread已經存在,但它沒有回答我的問題。

感謝,
伊利亞·

+0

我認爲你應該嘗試這樣的MSDOS命令,如md文件夾的路徑和這些命令是由您的應用程序 – Badr 2011-01-05 09:59:57

+0

運行您可以請更具體或給我一個代碼示例?我不是很熟悉C++ ...謝謝! – 2011-01-05 10:02:35

回答

0

它看起來像是足以在安裝程序中設置此文件夾的權限,現在它正常工作。

感謝大家的回答!

3

你已經回答了你自己的問題。你需要在Program Files下寫在Windows管理員7

應用數據都會在不同的區域下的用戶//應用程序數據等..

您可以隨時使用註冊表來選擇位置寫,所以你可以使用XP上的舊區域以及Vista和Windows 7上的新區域。

3

在Vista和更高版本下用戶訪問受限,您不想嘗試將文件放入「Program Files」或任何其他非標準的地方。您應該真的使用SHGetFolderPath從系統獲取正確的位置。

+0

請參閱http://stackoverflow.com/questions/1615444/windows-standard-file-locations/1615619#1615619以供API使用。 (它們在XP和Vista/Win7上有所不同) – Macke 2011-01-05 10:21:27

1

由於@CashCow寫道:

你需要在Program Files管理員 寫在Windows 7

這樣做是爲了提升自己的過程

最佳方式(使用ShellExecute "runas"或類似),然後創建文件夾。

一些ShellExecute例子:

+0

如果您需要在系統區創建一個文件夾,您應該在安裝程序中使用管理員權限運行。 – 2011-01-05 10:15:53

+0

是否有使用ShellExecute的一些很好的例子,因爲我不是很熟悉C++ – 2011-01-05 10:25:20

3

正如其他人已經寫,的%ProgramFiles%是不存儲用戶數據的正確的地方。正確的解決方案顯然是重新設計應用程序,以便它使用不同的存儲位置。

作爲替代方案存在一個快速和骯髒的修復(!):如果應用程序有一個清單,用戶帳戶控制數據重定向踢,透明地重定向寫請求的系統區域在一個安全的地方用戶資料。重定向目標是%LocalAppData%\ VirtualStore \ Program Files。有關這種內置虛擬化的詳細信息,請參閱here

所以你可以通過簡單地從應用程序中刪除清單來完成。

相關問題