如何通过外部程序修改AppData目录下的user.config文件?
如何通过外部程序编程修改目标应用的user.config
方法一:利用ConfigurationManager直接加载目标程序集配置
无需手动拼接路径,通过指定目标应用的exe路径,调用ConfigurationManager.OpenExeConfiguration的重载即可自动定位到AppData中的user.config:
// 目标应用的exe完整路径 string targetExePath = @"C:\Path\To\YourTargetApp.exe"; // 加载目标应用的用户级配置 Configuration config = ConfigurationManager.OpenExeConfiguration(targetExePath); // 修改配置项示例 if (config.AppSettings.Settings["YourSettingKey"] != null) { config.AppSettings.Settings["YourSettingKey"].Value = "NewSettingValue"; } // 保存修改 config.Save(ConfigurationSaveMode.Modified); // 刷新配置使修改生效 ConfigurationManager.RefreshSection("appSettings");
方法二:手动计算StrongName哈希值拼接路径
如果必须手动构造路径,那个哈希值是基于程序集的名称、版本、公钥令牌、文化信息组合计算而来的,步骤如下:
- 加载目标程序集并获取其强名称信息:
Assembly targetAssembly = Assembly.LoadFrom(targetExePath); AssemblyName assemblyName = targetAssembly.GetName(); string publicKeyToken = BitConverter.ToString(assemblyName.GetPublicKeyToken()).Replace("-", "").ToLower(); string culture = assemblyName.CultureInfo.Name.IsNullOrEmpty() ? "neutral" : assemblyName.CultureInfo.Name;
- 生成哈希计算的输入字符串并计算SHA1哈希:
string hashInput = $"{assemblyName.Name}, Version={assemblyName.Version}, Culture={culture}, PublicKeyToken={publicKeyToken}"; using (SHA1 sha1 = SHA1.Create()) { byte[] hashBytes = sha1.ComputeHash(Encoding.UTF8.GetBytes(hashInput)); string base64Hash = Convert.ToBase64String(hashBytes); // 过滤Base64中的非字母数字字符,得到目标哈希串 string strongNameHash = new string(base64Hash.Where(char.IsLetterOrDigit).ToArray()); }
- 拼接完整的user.config路径:
string userConfigFullPath = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), assemblyName.Name, $"{assemblyName.Name}.exe_StrongName_{strongNameHash}", assemblyName.Version.ToString(), "user.config" );
拿到路径后即可直接读写文件内容修改配置。
注意事项
- 运行外部程序时需具备访问目标用户AppData目录的权限,若修改其他用户的配置,需模拟对应用户权限。
- 若目标应用正在运行,修改user.config后通常需要重启应用才能让配置生效。
内容的提问来源于stack exchange,提问作者Abedron
相关产品推荐
相关产品推荐

