从另一个可访问的 C# 应用读取用户(非应用)设置

Read user (not app) settings from another accessible C# app

假设我有两个应用程序 A 和 B。应用程序 A 具有标准 Settings.settings 类型的配置。我做了 A 的设置 public(而不是默认的 internal)。在 B 中引用 A 并使用 A.Settings.Default 只会产生设计时默认值。没有保存的用户设置。调用 Reload 无效。

更简单,在 LINQPad 中导入对 A 的引用并转储 A.Settings.Default 仅显示默认值。与上面的效果相同。

我什至在 SO 上发现了几个类似的问题,但 none 有明确的答案。有什么简单的方法可以完成看似微不足道的任务吗?

假设您的应用是 A.exe 和 B.exe。

B.exe 引用 A.exe.

当我 运行 A.exe 时,它从以下位置读取/写入用户设置:

C:\Users\<user>\AppData\Local\A\A.exe_Url_ify12bcwso2vevlc4wawlllokphlsntr.0.0.0\user.config

当我 运行 B.exe 时,它读取/写入用户设置(A.exe)到/从:

C:\Users\<user>\AppData\Local\B\B.exe_Url_vhnd4ku3yt2pxsldv3qsblquadzyhg3g.0.0.0\user.config

我通过使用 procmon.exe

监控 A 和 B exe 的磁盘 activity 获得了这些路径

如您所见,用户设置背后的逻辑实际上与应用设置相同。 运行time 使用当前正在执行的进程的名称来存储用户设置,因此无法从 B.exe 访问 A.exe 的设置,因为它们是从 [=32= 保存的].

这是我测试的代码:

A.exe:

static void Main(string[] args)
{
    Console.WriteLine("A.Settings1.Default.AExeSetting1: {0}", A.Settings1.Default.AExeSetting1);
    A.Settings1.Default.AExeSetting1 += "-";
    Console.ReadLine();
    A.Settings1.Default.Save();
}

B.exe:

static void Main(string[] args)
{
    Console.WriteLine("A.Settings1.Default.AExeSetting1: {0}", A.Settings1.Default.AExeSetting1);
    A.Settings1.Default.AExeSetting1 += "-";
    Console.ReadLine();
    A.Settings1.Default.Save();
}