我正在使用 windows 窗体和 c# 3.0 编写应用程序。我想知道是否有推荐的跨时间持久化数据的方法。但是,我不想触摸它正在运行的机器,因此,我想将数据存储在二进制可执行文件中(最好是因为不需要用随机配置文件弄乱用户的文件夹)。
因此,如果有人对如何做到这一点有任何想法,将不胜感激!
杰森
我正在使用 windows 窗体和 c# 3.0 编写应用程序。我想知道是否有推荐的跨时间持久化数据的方法。但是,我不想触摸它正在运行的机器,因此,我想将数据存储在二进制可执行文件中(最好是因为不需要用随机配置文件弄乱用户的文件夹)。
因此,如果有人对如何做到这一点有任何想法,将不胜感激!
杰森
如果您正在寻找存储配置信息- app.config 或设置文件可能是要走的路。
如果您正在存储用户数据- 您应该真正允许用户控制它的保存位置 - 并且更喜欢机器上的 \User\Username 文件夹。
至于以什么格式存储它......您当然可以使用 SQLLite 之类的东西 - 但如果您不存储真正的二进制数据,XML 也没有任何问题。.NET 提供了许多 API来将对象图转换为 XML 表示形式——您可能想研究一下。
如果您不想在本地用户的机器上存储任何内容,您可能需要一个网络数据库 - 或 Web 服务 - 将用户数据上传到其中。只要确保您的用户理解这一点 - 许多人不喜欢他们的私人数据在未经他们同意的情况下被发送到网络上的某个地方。
您真的不想修改可执行文件。许多病毒扫描程序会隔离内容或大小不断变化的可执行文件 - 作为主动防止病毒和恶意软件感染计算机的一种方式。你不想去那里。
不要修改可执行文件。添加单个SQLite数据库是一个更好的解决方案。
隔离存储是另一种选择。
SQLite 是您正在寻找的,并且与 c# 兼容
如果您不想将数据存储在最终用户 PC 上的 SQLite 数据库中,您可以调用另一台服务器上的 Web 服务,该服务器将其数据存储在 SQL Server 或其他东西中。
我不相信 Windows 窗体项目可以像那样修改自己(我前段时间试图自己找到一种方法)。某种形式的托管应用程序,例如 Silverlight 应用程序(该应用程序本质上是一个 zip 文件)可能是可行的方法。Silverlight 应用程序虽然需要 silverlight 插件(我仍然不确定是否允许 silverlight 应用程序修改自身)。
我认为某种配置文件是可取的,并且不会留下太多混乱。
确保您的应用程序完全独立的一种方法是在编译项目后使用 ThinStall 之类的程序。这会虚拟化应用程序,并可以在 .exe 文件内部为其提供自己的文件系统或注册表。
可执行文件更改自身的一种方法是将另一个可执行文件放入其中(作为资源嵌入,然后在需要时将其提取到文件中)。然后这个可执行文件可以修改第一个,但是我认为没有任何框架可以做到这一点,所以它需要非常清楚地知道要改变什么以及在哪里改变。