1

Delphi を使用して、firebird データベースのバックアップを行うサービスを作成しました。このサービスは基本的に宛先ディレクトリを取得し、GBAK を使用して FBK ファイルを作成します。「Google Drive」ディレクトリ以外のどのディレクトリでも問題なく動作しますが、解決方法がわかりません。

サービスとは別に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; 
4

1 に答える 1

4

Google ドライブは通常、フォルダへのアクセスをフォルダを作成したユーザーに制限します。サービスは、LocalSystem として実行される可能性が最も高いです。フォルダーのアクセス許可を確認するだけです(プロパティ/セキュリティ)

于 2013-07-11T14:52:16.880 に答える