将应用程序设置存储在项目文件夹而不是 AppData 中

2023-12-20

我的项目中有一个 Settings.cs 文件,我通过以下方式从程序访问其中的数据

Properties.Settings.Default.MyProperty

生成的设置文件存储在以下位置

C:\Users\Foo\AppData\Local\MyApp\MyApp.exe_Url_jknwq2raeohczydfp1loj02nf05zldfk\1.0.0.0\user.config

问题是,这不仅是特定于用户的,而且还会导致程序为每个签名(调试/发布等)提供许多 user.config 文件,这迫使开发人员用户每次都再次填充整个设置他启动了该程序的一个“版本”,该程序还没有特定的 user.config。 (如果我还不够清楚,我很乐意提供更多细节)

我希望我的应用程序为所有用户提供一个设置文件,无论“版本”如何(调试/发布或其他)。这样,开发用户必须一次性设置这些设置,并且这些设置将在每次启动应用程序时生效,而无需为其他签名/用户重新输入它们。


您可以像所有高级程序一样保存和读取设置Registry,这就是如何做到这一点:

public object GetRegistryValue(string KeyName, object DefaultValue)
        {
            object res = null;
            try
            {
                Microsoft.VisualBasic.Devices.Computer c = new Microsoft.VisualBasic.Devices.Computer();
                Microsoft.Win32.RegistryKey k = c.Registry.CurrentUser.OpenSubKey("Software\\YourAppName", true);
                if (k != null)
                {
                    res = k.GetValue(KeyName, DefaultValue);
                }
                else
                {
                    k = c.Registry.CurrentUser.CreateSubKey("Software\\YourAppName");
                }
                if (k != null)
                    k.Close();
                // ex As Exception
            }
            catch
            {
                //PromptMsg(ex)
            }
            return res;
        }

public void SetRegistryValue(string KeyName, object _Value)
        {
            try
            {
                Microsoft.VisualBasic.Devices.Computer c = new Microsoft.VisualBasic.Devices.Computer();

                Microsoft.Win32.RegistryKey k = c.Registry.CurrentUser.OpenSubKey("Software\\YourAppName", true);
                if (k != null)
                {
                    k.SetValue(KeyName, _Value);
                }
                else
                {
                    k = c.Registry.CurrentUser.CreateSubKey("Software\\YourAppName");
                    k.SetValue(KeyName, _Value);
                }
                if (k != null)
                    k.Close();
                // ex As Exception
            }
            catch
            {
                //PromptMsg(ex)
            }
        }

Another您可以选择创建一个可序列化的类([可序列化()]attrib) 包含所有设置作为属性,然后使用 BinaryFormatter 类将其保存在您的应用程序目录中。

public void saveBinary(object c, string filepath)
{
    try
    {
        using (System.IO.Stream sr = System.IO.File.Open(filepath, System.IO.FileMode.Create))
        {
            System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            bf.Serialize(sr, c);
            sr.Close();
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

public object loadBinary(string path)
{
    try
    {
        if (System.IO.File.Exists(path))
        {
            using (System.IO.Stream sr = System.IO.File.Open(path, System.IO.FileMode.Open))
            {
                System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                object c = bf.Deserialize(sr);
                sr.Close();
                return c;
            }
        }
        else
        {
            throw new Exception("File not found");
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
    return null;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将应用程序设置存储在项目文件夹而不是 AppData 中 的相关文章

  • 是否可以使用 http url 作为 DirectShow .Net 中源过滤器的源位置?

    我正在使用 DirectShow Net 库创建一个过滤器图 该过滤器图通过使用 http 地址和 WM Asf Writer 来流式传输视频 然后 在网页上 我可以使用对象元素在 Windows Media Player 对象中呈现视频源
  • Boost ASIO 串行写入十六进制值

    我正在使用 ubuntu 通过串行端口与设备进行通信 所有消息都必须是十六进制值 我已经在 Windows 环境中使用白蚁测试了通信设置 并得到了我期望的响应 但在使用 Boost asio 时我无法得到任何响应 以下是我设置串口的方法 b
  • 如何在 C# 中将 Json 转换为对象

    我想将 Json 转换为 C 中的对象 这里的 Json 是 值 e920ce0f e3f5 4c6f 8e3d d2fbc51990e4 如何使用 Object 问题看似愚蠢 但其实并不那么愚蠢 我没有简单的 Json 我有 IEnume
  • Selenium - C# - Webdriver - 无法找到元素

    在 C 中使用 selenium 我试图打开浏览器 导航到 Google 并找到文本搜索字段 我尝试下面的 IWebDriver driver new InternetExplorerDriver C driver Navigate GoT
  • 如何向 Mono.ZeroConf 注册服务?

    我正在尝试测试 ZeroConf 示例http www mono project com Mono Zeroconf http www mono project com Mono Zeroconf 我正在运行 OpenSuse 11 和 M
  • MVC 5 中具有 ASP.NET Identity 的 Autofac 不会验证 OWIN 管道中的安全标记

    我在 MVC 5 中设置了 AutoFac 来与 ASP NET Identity 一起使用 表面上一切似乎都工作正常 即用户可以创建帐户并登录 但后来我发现 当安全标记更改时 用户不会注销 通过在 AspNetUsers 表中进行暴力破解
  • 用于在标头更改时重新编译的简单 C 项目的示例 makefile

    有谁有完整的 makefile 可以执行以下操作 如果 HEADER 文件发生更改 则重建项目 cpp 文件在 makefile 中列出 头文件未在 makefile 中列出 头文件允许与 cpp 文件具有不同的名称 部分cpp文件没有头文
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • OpenGL:如何检查用户是否支持glGenBuffers()?

    我检查了文档 它说 OpenGL 版本必须至少为 1 5 才能制作glGenBuffers 工作 用户使用的是1 5版本但是函数调用会导致崩溃 这是文档中的错误 还是用户的驱动程序问题 我正在用这个glGenBuffers 对于VBO 我如
  • wordexp 失败时我们需要调用 wordfree 吗?

    wordexp 失败时我们需要调用 wordfree 吗 在某些情况下 调用 wordfree 似乎会出现段错误 例如 当 wordfree 返回字符串为 foo bar 的错误代码时 这在手册页中并不清楚 我已经看到在某些错误情况下使用了
  • 让网络摄像头在 OpenCV 中工作

    我正在尝试让我的网络摄像头在 Windows 7 64 位中的 OpenCV 版本 2 2 中捕获视频 但是 我遇到了一些困难 OpenCV 附带的示例二进制文件都无法检测到我的网络摄像头 最近我发现这篇文章表明答案在于重新编译一个文件 o
  • ASP.NET Core 中间件与过滤器

    在阅读了 ASP NET Core 中间件之后 我对何时应该使用过滤器以及何时应该使用中间件感到困惑 因为它们似乎实现了相同的目标 什么时候应该使用中间件而不是过滤器 9频道有一个关于此的视频 ASP NET 怪物 91 中间件与过滤器 h
  • 调用 .ToArray() 时出现 ArgumentException

    我有一个经常被清除的列表 代码完全是这样的 VisitorAgent toPersist List
  • 构建 C# MVC 5 站点时项目之间的处理器架构不匹配

    我收到的错误如下 2017 年 4 月 20 日构建 13 23 38 C Windows Microsoft NET Framework v4 0 30319 Microsoft Common targets 1605 5 警告 MSB3
  • 如何编写一个接受 int 或 float 的 C 函数?

    我想用 C 语言创建一个扩展 Python 的函数 该函数可以接受 float 或 int 类型的输入 所以基本上 我想要f 5 and f 5 5 成为可接受的输入 我认为我不能使用if PyArg ParseTuple args i v
  • 在 C# 的 WebAPI 中的 ApiController 上使用“传输编码:分块”提供数据

    我需要服务分块传输使用编码数据API控制器 因为我无权访问HttpContext or the Http请求 我有点不知道在哪里写入响应以及在哪里刷新它 设置如下 public class MyController ApiControlle
  • 如何组合两个 lambda [重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中组合两个 lambda 表达式 https stackoverflow com questions 1717444 combining two lamba expressions in c
  • 声明一个负长度的数组

    当创建负长度数组时 C 中会发生什么 例如 int n 35 int testArray n for int i 0 i lt 10 i testArray i i 1 这段代码将编译 并且启用 Wall 时不会出现警告 并且似乎您可以分配
  • 如何为有时异步的操作创建和实现接口

    假设我有数百个类 它们使用 计算 方法实现公共接口 一些类将执行异步 例如读取文件 而实现相同接口的其他类将执行同步代码 例如将两个数字相加 为了维护和性能 对此进行编码的好方法是什么 到目前为止我读到的帖子总是建议将异步 等待方法冒泡给调
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有

随机推荐

  • 如何在 Bootstrap Vue 的卡组组中制作滑块?

    我使用本教程制作卡片组 https bootstrap vue js org docs components card card deck groups https bootstrap vue js org docs components
  • 基于子图像高度的 DIV 高度在底部添加了一些额外的像素

    为什么图像的父 div 底部有一些额外的像素 如何在不硬编码父 div 高度的情况下删除像素 http jsfiddle net 6x8Dm http jsfiddle net 6x8Dm HTML div class wrapper di
  • 调度多个 .NET Core 控制台应用程序

    我能够安排测试 NET Core 控制台应用程序 将程序 脚本设置为 dotnet 将参数设置为 mytestnetcoreconsoleapp dll 并将启动目录设置为包含 dll 的目录 不过 对于多个控制台应用程序来说 这样做是否正
  • 我们可以在没有 JavaScript 的情况下制作“打印”按钮吗?

    我们可以在没有 JavaScript 的情况下制作 打印 按钮吗 打开浏览器打印窗口 HTML 没有针对锚标记或输入按钮 或其他任何内容 的内置 打印 操作 因此 JavaScript 是您的方式 您还可以为用户提供有关如何使用 文件 gt
  • 从 git 存储库获取版本号

    我们有一个构建系统 它使用 svn ID 作为需要五位数字的 VM 构建器设备的输入 当我从 git 构建时 我一直通过计算 git 存储库中的提交数量来伪造这一点 这只是一种工作 我正在努力弄清楚 如何从 git 存储库中获取唯一的 5
  • 验证 Windows Phone 应用内购买收据

    我正在开发 Windows Phone 8 应用程序 我的应用程序将包含应用内购买 我试图理解收据的概念 据我了解 当有人在我的应用程序内购买产品后 会生成收据
  • 使用 C# 从网站下载文件

    我正在尝试使用以下代码从网站下载文件 WebClient webClient new WebClient webClient DownloadFile http www nseindia com content historical EQU
  • -bash: ./deploy.sh: 权限被拒绝,错误:脚本返回退出代码 126

    我正在尝试使用 Jenkins 实现持续部署 这涉及到将 jar 文件发送到远程服务器 并在远程服务器上启动该 jar 文件 问题是我不断收到访问被拒绝错误 并且我已经尝试了远程和本地服务器上的每个帐户似乎都不起作用 我犯了同样的错误 詹金
  • 为什么选择选择更改多个提交?

    我这里有 2 个分支 即分支 1 和分支 2 分支1增加了很多新功能 分支2也很稳定 今天 我只想将分支 1 中的 1 个功能合并到分支 2 中 所以 我只是跑git cherry pick
  • Drupal 7 - 如何从模块加载模板文件?

    我正在尝试在 Drupal 7 中构建自己的模块 所以我创建了一个名为 moon 的简单模块 function moon menu items array items moon array title gt description gt t
  • LINQ to Entities 在 DateTime.DayOfWeek 上加入

    想象两个表 班次 RANK S DAY Shifts 包含一个 ShiftDate 列 它是DateTime并且 RANK S DAY 有一个DayOfWeek柱子 我需要加入 int ShiftDate DayOfWeek equals
  • toUpperCase() 没有使字符串大写

    我不知道我做错了什么 但不知何故 toUpperCase 字符串函数在我的浏览器上不起作用 或者我弄错了什么 var string kjsdgfiIJHBVSFIU string toUpperCase console log string
  • Android - mediarecorder 的最大 maxfilesize 是多少?

    Android 对于 Android 媒体记录器 setMaxFileSize 可以设置的最大文件大小是多少 我知道它在 4147483650 和 5147483650 之间 为什么首先要有限制 我正在录制到 SDCARD 在运行之前检测卡
  • 使用 spring 在 Ibm Websphere MQ 中实现重试逻辑

    我正在使用 Spring 和 Websphere MQ 进行以下消息传递配置 我需要实现一个场景的重试逻辑 其中我从队列接收消息并将消息数据放到弹性搜索服务器 搜索服务器是非事务性的 如果搜索服务器关闭 我必须回滚消息再次放入队列并在一段时
  • 如何在Rails中管理3个多对多模型

    我正在跟进铁路广播公司 http railscasts com episodes 47 two many to many制作不同模型进行维护的建议many to many关系 但是 我在提取传递关系数据时遇到问题 假设有 3 个多对多模型
  • Android 2.2 - 如何检测我是否安装在 SDCard 上?

    我正在编写一个存储大量媒体文件的 Android 应用程序 它们不是那种会弄乱用户通知或其他媒体目录的类型 而且数量太多 但它们也必须是用户可更新的 所以我不能将它们放入资源中 我可以使用 getExternalFilesDir 获取 SD
  • DLL-导出模板基类的静态成员

    在 DLL 中 我有一个带有模板基类的导出非模板类 该模板基类有一个静态成员变量 我在链接到具有导出的非模板类的 DLL 的可执行文件中使用静态基成员 在许多情况下 我会收到未解决的外部符号或有关不一致链接的投诉 我发现了一种可行的方案 但
  • TDD、DDD 和封装

    经过几年遵循我工作场所 架构师 传下来的不良实践并认为一定有更好的方法之后 我最近一直在阅读有关 TDD 和 DDD 的内容 我认为这些原则和实践将是一个很好的方法 非常适合我们编写的软件的复杂性 然而 我见过的许多 TDD 示例都调用域对
  • Flutter:应用程序的区域设置不受其所有本地化代表的支持

    您好 我正在尝试在 flutter 应用程序中添加 BottomNavigationBar 但当我运行项目时出现错误 A MaterialLocalizations delegate that supports the ka GE loca
  • 将应用程序设置存储在项目文件夹而不是 AppData 中

    我的项目中有一个 Settings cs 文件 我通过以下方式从程序访问其中的数据 Properties Settings Default MyProperty 生成的设置文件存储在以下位置 C Users Foo AppData Loca