Использование Gmail API внутри службы windows - PullRequest
0 голосов
/ 26 февраля 2020

Я создал службу, которая считывает новые электронные письма из моей электронной почты и выполняет операции с ней; она должна работать как служба windows, но проблема в том, что при первом запуске приложения она запрашивает проверку подлинности доступа Google , только один раз. Я могу запустить его как консольное приложение один раз, аутентифицироваться, а затем запускать его неограниченное количество раз без необходимости аутентификации, но при запуске проекта в качестве службы windows приложение не будет работать, поскольку нет окна с запросом на авторизацию доступ, у кого-нибудь есть идея или источник, который мог бы помочь мне?

РЕДАКТИРОВАТЬ ***

Я вижу, что после первой аутентификации он создает токен. json и затем приложение использует его для аутентификации без запроса, почему служба не может его прочитать?

вот как это выглядит:

string credPath = "token.json";

            credential = GoogleWebAuthorizationBroker.AuthorizeAsync(

                GoogleClientSecrets.Load(stream).Secrets,
                Scopes,
                "user",
                CancellationToken.None,
                new FileDataStore(credPath ,false )).Result;
        }

FileDataStore созданный токен. json папка + файл при первом запуске, затем снова использовал его, так что я не знаю, почему приложение, работающее как служба windows, не может прочитать его оттуда, как это было в консольном приложении.

1 Ответ

1 голос
/ 26 февраля 2020

Windows служба читает файл app.config при запуске. Поэтому, если позже вы изменили какое-то значение в app.config, вам нужно либо перезапустить службу, либо использовать этот код, чтобы обновить sh раздел, содержащий ваш токен, а затем прочитать его.

См .: оригинальный ответ из jdigaetano

ConfigurationManager.RefreshSection("appSettings") 
sValue = ConfigurationManager.AppSettings(name)

Подробнее об RefreshSection можно узнать в документации .

Вы можете создать новый ключ в appSettings

<appSettings>
    <add key="path" value="" />
</appSettings>

Затем, если вы хотите сохранить путь к вашему токену. json в файле конфигурации, вы можете сделать это следующим образом

Configuration config = ConfigurationManager
                          .OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings["path"].Value = "pathToTokenJson";
config.AppSettings.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Modified);

Обратите внимание, что вам нужно добавить ссылку на System.Configuration

...