【发布时间】:2016-07-06 15:29:21
【问题描述】:
我有一个部署了 Winforms 应用程序的客户端。由于应用程序的原始开发者出现问题,客户终止了与开发者的关系。一段时间后,该应用程序的缺陷达到了他们需要寻找另一位开发人员来帮助的地步——这就是我出现的时候。我发现的第一件事是他们没有源代码的副本! (编辑:有一些 3 年前的源代码副本。它们差别太大而无用。)
尽管没有任何源代码,但我使用 dnSpy(ILSpy 的一个分支,带有集成调试器和其他附加功能)和直接编辑应用程序的 SQL 服务器数据库中的数据(使用综合安全性)。然而,我遇到的最新问题是一个令人困惑的问题......
有一个屏幕,记录的显示仅限于 2015 年。在 dnSpy 的帮助下,我发现这个限制是从应用程序设置中检索到的。这是谜团之一:应用程序的部署文件夹中没有 app.config!
在进行一些 Google 研究时,我发现了有关 user.config 文件的信息。然后我在%UserProfile%\AppData\Local\(CompanyName)\(AppName)(Hash)\1.0.0.0\ 下发现了app 文件的user.config。我打开了配置文件,发现了一个与我正在寻找的名称相同的设置,它的值为“2015”。尤里卡!...至少我是这么认为的。
我将 user.config 中的设置更改为“2016”,但在我运行应用程序时它似乎没有影响。我再次查看了 user.config 文件,设置已更改回“2015”!所以看起来我有正确的 user.config 应用程序,因为它正在写入配置文件。它只是应用程序正在从其他地方读取其初始设置。
我已经排除了一些其他的事情:
- 我检查了 machine.config。什么都没有。
- 在反编译的 MySettings 文件中,我注意到设置属性字段上的 DefaultSettingValue 属性。不幸的是,我正在查看的设置的 DefaultSettingValue 为“2014”。所以它似乎没有使用设置的默认值。
所以... TLDR;
已部署的 .Net Winforms 应用程序。同一文件夹中没有匹配的 appname.exe.config 文件。它没有从 user.config 文件中读取设置(尽管它正在写入文件)。
应用程序可以从哪里读取其设置?
【问题讨论】:
-
您可能找错地方了。查看
Users\USER NAME\AppData\LOCAL\(CompanyName)\(AppName)(Hash)\VERSION(注意缺少的本地)。这似乎更有可能是一个应用程序设置 -
实际上,这只是我原帖中的一个错字。 user.config 路径位于 AppData\\Local 下。感谢您发现这一点。
-
您也可以使用 sysinternals 的 procmon 来查看应用程序访问了哪些文件。
-
是的,仅仅因为您在“设置”中看到该值并不意味着它正在使用它。即使您看到代码读取它,也可能有其他代码从其他地方获取或计算它
标签: vb.net winforms app-config