从另一个可访问的 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();
}
假设我有两个应用程序 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();
}