Настройки сервиса

#vb.net #windows-services

Вопрос:

У меня есть сервис, написанный на VB, с некоторыми пользовательскими настройками. Два из них являются токеном доступа / обновления oauth, и мне нужно продолжать хранить новый токен, поэтому всякий раз, когда он обновляется, я снова записываю настройки.

Кто-нибудь может сказать мне, где эти настройки хранятся на моем компьютере? Я вижу, что файл app.exe.config не обновляется и не читается при запуске службы. У меня нет папки в usersusernameappdatalocal для имени службы, ни в роуминге, ни в locallow.

Я попытался использовать installutil для удаления и переустановки своей службы, надеясь, что это может привести к использованию настроек в app.exec.config, но этого не произошло, он все еще пытается использовать токен, который где-то давно устарел.

Если я вставлю новую пару токенов в свой файл app.exe.config, я увижу, что служба его не читает. Он считывает старый токен с момента, когда я в последний раз работал над ним / тестировал его, и получает ошибку истечения срока действия, потому что я использовал новую пару токенов в настольной тестовой версии приложения.

Кажется, я хожу по кругу, пытаясь найти, где хранятся эти настройки. Раздражает то, что у меня это работало, и «иногда» он забирает новый токен, и все работает. Но мне скоро нужно будет установить его на ПК клиентов, и я обеспокоен тем, что у меня будет еще одно бесплодное утро, когда я буду использовать старые токены и не смогу их обновить. Я уверен, что это то, чего я просто не понимаю, но я бы предпочел не хранить их в локальном файле, если в этом нет необходимости. Первый ответ, который появляется здесь, показывает, что у других есть аналогичные проблемы и, как правило, они обращаются либо к своему собственному хранилищу, либо к реестру, но это ответ 11-летней давности. Я использую VS 2019, если это имеет какое-то значение.

Это код, который я использую для хранения нового токена, если это поможет:

 My.Settings.RefreshToken = newToken ' this is returned in the refresh request
My.Settings.Save
 

Когда мой код открывается, он загружает настройки аналогичным образом:

 accessToken = My.Settings.AccessToken
refreshToken = My.Settings.RefreshToken
tokenExpires = My.Settings.Expiry
 

Даже если я отредактирую свой файл app.exe.config, чтобы он содержал «*» в поле истечения срока действия, он все равно каким-то образом находит дату/время истечения срока действия с момента предыдущего успешного запуска службы. Таким образом, он явно больше не извлекает информацию из этого файла.

Комментарии:

1. Мои извинения, у меня недостаточно опыта в этом деле, чтобы знать, что есть более чем один способ сделать это. Я отредактирую сообщение, чтобы включить код.

2. Я не совсем на 100% уверен, что вы придерживаетесь здесь правильного подхода. Я почти уверен, что на самом деле oauth должен использоваться не так. Вы должны пройти аутентификацию с помощью конечной точки OAuth, которая возвращает вам токен доступа и обновления. Хранение этих токенов вообще кажется немного неправильным

3. Я храню их только для того, чтобы при перезапуске службы (например, при перезагрузке компьютера) она пыталась обновить последний токен. Если у меня есть только самый первый токен обновления, сохраненный в настройках (или где-либо еще), он отклонит его, потому что он уже был заменен. На самом деле именно это и происходит здесь — потому что я не помещаю «новую» пару токенов в правильное место, она пытается подключиться к старой паре токенов и отклоняет ее.

4. Оставляя в стороне проблему использования OAuth, тем не менее, то же самое относится к любым настройкам, которые мне, возможно, потребуется обновить — проблема, с которой я сталкиваюсь, заключается в попытке найти, где они хранятся, как только сам сервисный код начнет запись обратно в настройки.

5. Какой профиль использует ваш Сервис? — Регистрация заезда Drive:WindowsSystem32configsystemprofileAppData или Drive:WindowsSysWOW64configsystemprofileAppData

Ответ №1:

Чтобы закрыть эту тему, комментарий @Jimi ранее содержал ключ. Настройки, обновляемые службой, хранятся в файле user.config, который в моем случае находится в c:windowssyswow64configsystemprofileappdata а затем имя моей заявки.

Комментарии:

1. Спасибо, я собираюсь это сделать, но пройдет еще 23 часа, прежде чем это позволит мне.