2011-11-21 62 views
2

以及我無法寫入文件,如果應用程序在啓動時運行自動,但當我點擊正常通過雙擊應用程序它創建文件通常即使我使用Wind7UAC.manifest運行應用程序作爲管理。哪裏不對 ?沒有得到這個WriteLN('WriteFile True');這意味着問題是與WriteFile的WriteFile和啓動時問題

Procedure CFile(FileName: String; imagem: string; Size: DWORD); 
    var 
     hFile: THandle; 
     lpNumberOfBytesWritten: DWORD; 
    begin 
     hFile := CreateFile(PChar(FileName), GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, 0); 
     if hFile <> INVALID_HANDLE_VALUE then 
     begin 
     if Size = INVALID_HANDLE_VALUE then 
     SetFilePointer(hFile, 0, nil, FILE_BEGIN); 
     if WriteFile(hFile, imagem[1], Size, lpNumberOfBytesWritten, nil) = true then 
     WriteLN('WriteFile True'); 
     CloseHandle(hFile); 
     end else WriteLN('Cannot Create File !'); 
    end; 
+0

您正在寫入哪個目錄? –

+0

C:\ Program Files我認爲只有windows32和Program Files文件夾有權訪問我已經閱讀了一些在MSDN庫中的位置?和我的UAC被禁用 – user1023395

+0

你沒有對這些文件夾的寫入權限 –

回答

3

我懷疑工作目錄是自動啓動應用程序時的Windows目錄。您沒有寫入權限(除非您禁用UAC)。

我建議您在打開文件時使用完全絕對路徑,而不是像目前一​​樣使用相對路徑。使用SHGetSpecialFolderPath查找合適文件夾的位置,

+0

大衛非常感謝它的作品完全絕對路徑確實欺騙 – user1023395

+1

順便說一句,你應該接受你的問題的最佳答案。我看到你是新人,可能還沒有抓到。請參閱[faq] –

+0

UAC清單的用途是什麼?我的意思是我在我的應用程序中使用,但仍然阻止? – user1023395

0

這可能是Windows用戶帳戶控制(UAC)阻止您的啓動程序。您可能必須創建一個任務才能啓動它。 This article包含詳細信息。