首页 > 解决方案 > 服务设置

问题描述

我有一个用 VB 编写的服务,带有一些用户设置。其中两个是 oauth 访问/刷新令牌,我需要继续存储新令牌,因此每当更新时,我都会再次将设置写掉。

谁能告诉我这些设置在我的电脑上存储在哪里?我可以看到 app.exe.config 文件没有被更新,并且在我启动服务时没有被读取。我在 users\username\appdata\local 中没有用于服务名称的文件夹,也没有在漫游中,也没有在 locallow 中。

我尝试使用 installutil 卸载并重新安装我的服务,希望这可能会导致它使用 app.exec.config 中的设置,但它没有,它仍在尝试使用某个地方已经过时的令牌。

如果我将一个新的令牌对粘贴到我的 app.exe.config 中,我可以看到该服务没有读取它。它正在读取我上次处理/测试它时的旧令牌,并收到过期错误,因为我在应用程序的桌面测试版本中使用了新令牌对。

我似乎在兜圈子,试图找到这些设置的存储位置。烦人的是我已经让它工作了,“有时”它会拿起新的令牌,一切正常。但是我很快就需要在客户的 PC 上安装它,而且我担心我会在使用旧令牌并且无法更新它们的情况下度过另一个毫无结果的早晨。我确定这是我不明白的事情,但如果我不需要,我宁愿不去将它们存储在本地文件中。这里出现的第一个答案表明其他人也有类似的问题,通常会求助于他们自己的存储或注册表,但这是一个已有 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 文件以在到期字段中包含“*”,它仍然以某种方式从上次成功运行服务时找到到期日期/时间。因此,它显然不再从该文件中检索信息。

标签: vb.netwindows-services

解决方案


要关闭它,@Jimi 早些时候的评论是关键。服务更新的设置存储在一个名为 user.config 的文件中,在我的情况下,该文件位于 c:\windows\syswow64\config\systemprofile\appdata 中,然后是我的应用程序名称。


推荐阅读