Есть ли способ аутентификации и автоматической загрузки файла c в драйвер Google с помощью службы windows? Я использую этот код для загрузки файла в настольное приложение и работаю, но не работаю в windows сервисе
этот класс может загружать, создавать, получать детали файла, аутентифицировать, проверять, существует ли каталог в настольном приложении, но в сервисном приложении нет работает и получил эту ошибку
Произошла одна или несколько ошибок. в System.Threading.Tasks.Task.ThrowIfExceptional (Boolean includeTaskCanceledExceptions) в System.Threading.Tasks.Task.Wait (Int32 millisecondsTimeout, CancellationToken cancellationToken) в System.Threading.Tasks.Task.Wait () * 100 * 100 * SepandAutoBackup.SepandAutoBackup.d__9.MoveNext () в C: \ SepandAuto.cs: строка 361
class GoogleDrive_Cls
{
public DriveService Authenticate()
{
string[] scopes = new string[] { DriveService.Scope.Drive, DriveService.Scope.DriveFile };
var clientId = "xxxxxx.googleusercontent.com";
var clientSecret = "zzzzzz";
ClientSecrets cs =( new ClientSecrets { ClientId = clientId, ClientSecret = clientSecret });
var credential =
GoogleWebAuthorizationBroker
.AuthorizeAsync(cs, scopes, "Sepand", CancellationToken.None).Result;
DriveService service = new DriveService
(new BaseClientService.Initializer()
{ HttpClientInitializer = credential, ApplicationName = "z" });
return service;
}
public File CreateDirectory(DriveService _service, string _name, string _desc, string _parent)
{
File newDirectory = null;
File body = new File();
body.Name = _name;
body.Description = _desc;
body.MimeType = "application/vnd.google-apps.folder";
FilesResource.CreateRequest request = _service.Files.Create(body);
newDirectory = request.Execute();
return newDirectory;
}
public File UploadFile(DriveService _service, string _uploadFile, string _parent)
{
if (System.IO.File.Exists(_uploadFile))
{
File body = new File();
FilesResource.ListRequest request = _service.Files.List();
FileList f = request.Execute();
string parent = "";
for (int i = 0; i < f.Files.Count; i++)
{
if (f.Files[i].Name == _parent)
parent = f.Files[i].Id;
}
body.Name = System.IO.Path.GetFileName(_uploadFile);
body.Description = "SepandAutoBackup";
body.MimeType = "application/vnd.google-apps.unknown";
body.Parents = new List<string>() { parent };
Stream stream = new System.IO.FileStream(_uploadFile, FileMode.Open);
FilesResource.CreateMediaUpload requset =
new FilesResource.CreateMediaUpload(_service, body, stream, "");
requset.Upload();
return requset.ResponseBody;
}
else return null;
}
public bool DicetoryExists(DriveService _service, string _directoryName)
{
FilesResource.ListRequest request = _service.Files.List();
FileList files = request.Execute();
string parent = "";
for (int i = 0; i < files.Files.Count; i++)
{
if (files.Files[i].Name == _directoryName)
return true;
}
return false;
}
public GoogleFile GetFileDetails(DriveService _service, string _fileName)
{
GoogleFile values = new GoogleFile();
FilesResource.ListRequest request = _service.Files.List();
request.Fields = "files(id,name, webViewLink, size)";
var files = request.Execute().Files;
if (files.Count > 0 && files != null)
{
foreach (var file in files)
{
if (file.Name == _fileName)
{
values.Id = file.Id;
values.Name = file.Name;
values.WebLink = file.WebViewLink;
values.Size = file.Size;
}
}
}
return values;
}
public struct GoogleFile
{
public string Id;
public string Name;
public string WebLink;
public long? Size;
}
}