WriteFile和启动时的问题

时间:2011-11-21 10:44:30

标签: delphi

如果应用程序在启动时运行auto,我无法写文件但是当我通过双击应用程序正常点击它正常创建文件,即使我正在使用Wind7UAC.manifest运行应用程序作为管理员。怎么了 ?没有得到 WriteLN('WriteFile True'); 这意味着问题出在 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;

2 个答案:

答案 0 :(得分:3)

我怀疑自动启动应用时工作目录是Windows目录。您无权在那里写(除非您禁用UAC)。

我建议您在打开文件时使用完整的绝对路径,而不是目前的相对路径。使用SHGetSpecialFolderPath查找相应文件夹的位置

答案 1 :(得分:0)

这可能是Windows用户帐户控制(UAC)在启动时阻止您的程序。您可能必须创建一个任务来启动它。 This article包含详细信息。