2013-07-11 3 views
1

저는 Delphi를 사용하여 파이어 버드 데이터베이스의 백업을 수행하는 서비스를 만들었습니다. 기본적으로 서비스는 대상 디렉토리를 가져오고 GBAK를 사용하여 FBK 파일을 만듭니다. "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 드라이브는 일반적으로 사용자에게 폴더에 대한 액세스를 제한 폴더를 만들었습니다. 귀하의 서비스는 LocalSystem으로 실행됩니다. 폴더 권한 (속성/보안)을 확인하십시오.

관련 문제