2013-07-11 4 views
1

Я сделал службу для резервного копирования баз данных firebird с помощью Delphi. Служба в основном получает директорию назначения и создает файл FBK с использованием GBAK. Хорошо работает в любом каталоге, кроме каталога «Google Диск», и я не знаю, как его решить.Служба не может получить доступ к папке

Когда я исполняю GBAK отдельно от службы, он работает, так что я не знаю, что происходит не так

Вот код

if not FileExists(GetEnvironmentVariable('ProgramData') + '\MY\' + Nombre) then 
try 
    FillChar(SEInfo, SizeOf(SEInfo), 0); 
    SEInfo.cbSize := SizeOf(TShellExecuteInfo); 
    with SEInfo do 
    begin 
    fMask := SEE_MASK_NOCLOSEPROCESS; 
    Wnd := 0; 
    lpFile := PWIDEChar(RegQueryStringValue('SOFTWARE\Firebird Project\Firebird Server\Instances', 'DefaultInstance') + 'bin\gbak.exe'); 
    nShow := SW_HIDE; 
    lpParameters := PWIDEChar('-v -t -user SYSDBA -password "masterkey" MY ' + '"' + GetEnvironmentVariable('ProgramData') + '\MY\' + Nombre + '"'); 
    end; 
    if ShellExecuteEx(@SEInfo) then 
    begin 
    repeat 
     GetExitCodeProcess(SEInfo.hProcess, ExitCD); 
    until (ExitCD <> STILL_ACTIVE) or (Terminated); 
    end; 
except 
    on e: Exception do 
    begin 
    if GetLastError <= 32 then 
    begin 
     case GetLastError of 
     0, se_err_OOM: 
      InsertError('OutMem', error_1); 
     error_File_Not_Found: 
      InsertError('GMiss', error_2); 
     error_Path_Not_Found: 
      InsertError('Path', error_3); 
     error_Bad_Format: 
      InsertError('GBreak', error_4); 
     se_err_AccessDenied: 
      InsertError('AccX', error_5); 
     se_err_NoAssoc, se_err_AssocIncomplete: 
      InsertError('BadFile', error_6); 
     se_err_DDEBusy, se_err_DDEFail, se_err_DDETimeOut: 
      InsertError('DDE', error_7); 
     se_err_Share: 
      InsertError('Share', error_8); 
     else 
      InsertError('Unkn', error_9); 
     end; 
     MYBackup.Status := csStopped; 
     Exit; 
    end 
    else 
    begin 
     InsertError(e.ClassName, e.Message); 
     MYBackup.Status := csStopped; 
     Exit; 
    end; 
    end; 
end; 
+0

какая ошибка вы получаете? – whosrdaddy

+0

Нет, кажется, что работает, но ничего не делает –

+1

Какие пути работают, а какие нет (буквальные пути, пожалуйста)? –

ответ

4

Google Drive обычно ограничивает доступ к папке для пользователя который создал папку. Ваша служба скорее всего работает как LocalSystem. Просто проверьте права доступа к папке (Свойства/Безопасность)

Смежные вопросы