搜索|收藏|地图|订阅|图片|论坛|商城
  当前位置 :| 首页>软件>编程学院>VB>vb技巧>

Advanced Basics:在 Visual Basic .NET 中记住用户信息

来源:MSDN 编辑:若水 时间:2008-04-01

Duncan Mackenzie

下载本文的代码: AdvancedBasics0504.exe (130KB)

很多应用程序需要存储要在会话之间持续保持的特定于用户的设置。但是,如何在基于 Microsoft® .NET Framework 的应用程序中保存和恢复这些设置呢?找到正确的答案并非易事。您可以在新闻组和论坛中找到各种各样的解决方案,但在已发布的解决方案中,只有一小部分阐明了处理这一需求的正确方式。

首先,让我们定义应用程序可能具有的两种主要类型的设置:应用程序设置和用户设置。应用程序设置随应用程序一起交付,影响每个用户,并且根据预期,只在应用程序的总体行为需要更改时,才会作为管理任务进行修改。

请考虑一个商业人力资源应用程序。当该应用程序部署到特定公司内部时,应用程序设置会被自定义,以指定用户将要连接到的数据库服务器、在哪里找到要添加到 UI 中的公司徽标,以及其他信息。这些都是应用程序设置,而不是用户设置,并且可以直接安装到与程序本身相同的目录中。这些设置很可能安装到只有管理员有权在其中编辑或删除文件的目录(例如,c:\Program Files\)中,这有助于加深这些设置绝对不是用户设置这一印象。应用程序应该只需要读取这些设置,而不去更改它们。

用户设置是特定于用户的首选项,并且需要可从代码中进行编辑。对于一个虚构的 HR 应用程序而言,用户设置可能包括应用程序窗口的大小/位置、应用程序的启动状态,甚至可能包括快速更改的信息 — 如所查看的最后五个雇员(用于那个有用的“File”-“Recently Viewed Items…”菜单选项)。上述所有设置都需要在应用程序会话启动时检索,在应用程序运行过程中根据需要进行编辑,持久保留到磁盘中以便在用户下一次启动程序时可用。

设置和检索应用程序设置


.NET Framework SDK 中对于应用程序配置文件的创建进行了比较好的说明,但是我想最好在此为您提供简要的概述。第一步是在项目内部创建一个新的设置文件,方法是从“Project”菜单中选择“Add New Item”,然后选择“Application Configuration File”选项。使该文件保留其默认名称 App.Config;当您生成项目时,该文件将移动至输出目录中,并且被适当重命名 (yourappname.exe.config)。在该新文件内部,您可以定义自定义配置节(使用您的数据所需要的任何结构),或者只是通过使用可以容纳名称-值对列表的 appSettings 块来添加您自己的设置。存储几个简单的值可以产生如下所示的文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <appSettings>
       <add key="Company Name" value="Java Jitters" />
       <add key="Database Server" value="BigSQLServer" />
   </appSettings>    
</configuration>

通过 System.Configuration 命名空间的类和方法,可以容易地检索 appSettings 节中存储的值。您甚至不需要亲自加载该文件;如果该文件被正确命名并且位于正确的位置(应用程序目录中的 yourappname.exe.config),则它会被自动发现和加载。

Dim companyName As String _
   = ConfigurationSettings.AppSettings("Company Name")

正如我提到的那样,应用程序配置文件的创建和访问得到了良好的说明(请在 .NET Framework SDK 中搜索“System.Configuration”),因此我不会在此进一步讨论该主题。

返回页首返回页首

为什么不应该使用 App.Config?

我经常在论坛或新闻组中看到以下问题:如何向我的 app.config 中写入?我们可以很容易地了解开发人员是如何提出该问题的。当在 .NET 内部写入的开发人员使用了应用程序配置文件及其简易的编程界面之后,他们想知道为什么不能使用同一个文件来存储用户设置。为什么有两种不同的配置应用程序的方法?稍后,他们发现 System.Configuration 命名空间没有提供任何用于向 app.config 文件中进行写入的方法。这本来应该是一种警示,但对于意志坚定的编程人员而言,这只是一个小小的障碍。随后,他们通常会搜索 Web,张贴新闻组问题,然后使用 XmlDocument 直接加载和编辑,甚至求助于常规文件 IO。

这不是一个好主意。您的应用程序不应该向该文件中写入,这至少有下列三个原因:

权限?安装、移除和编辑应用程序文件是一项管理任务,要求具有与普通用户不同的权限。在 Windows® XP 中,所示的一种方法是通过 Program Files 目录上的默认权限:对于用户而言是只读,但对于 Administrators 组的成员而言是读/写。如果您的应用程序安装到 Program Files 目录中,并且使用它的 app.config 文件来存储用户首选项,则保存对那些设置所做更改的操作需要本地计算机上的管理员权限。尽管很多开发人员(和用户)以他们自己计算机的管理员身份运行,但在大多数企业环境中,这肯定是一个问题。请注意,您不应该允许对 Program Files 进行自由访问;关于限制写入访问有一些很好的理由。

没有用户隔离?应用程序配置文件适用于计算机上的每个用户,因此如果多个用户共享同一台计算机,则每个人都将共享同一组选项。其后果可能只是令人烦恼(一个用户喜欢在启动时将窗口最大化,而另一个用户则希望将其窗口化),也可能导致极端的功能和安全问题(例如,应用程序需要您的 POP3 服务器信息,于是该计算机的每个用户都可以自由地读取该信息)。即使您的当前用户群全都是一个用户使用一台计算机,您也可以断定并不能保证总是如此;值得一提的是,甚至该系统中的 Guest 帐户也可能具有对 Program Files 目录的读取访问权限(因而具有对应用程序设置文件的访问权限),从而公开了该文件中存储的任何可能具有敏感性的信息。

app.config 文件是应用程序安装的一部分?该文件是应用程序本身的一部分,它将由新的安装进行重写并可能在应用程序卸载时移除。该文件中存储的任何用户数据都会丢失,取决于存储数据的类型的不同,这可能非常严重。

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?