2010-04-26 128 views
2

;)我正在编写一个.NET应用程序,让用户连接到给定的服务器。应用程序中的ALI信息存储在服务器中。但我想/需要存储用户的以下信息:存储地点:用户连接信息?

  • 他连接的服务器持续
  • 他用来连接最后 的用户名(没有,没有密码,永远)。

任何想法在哪里存储这最好?应用程序配置文件不明智(用户!= admin,application.config为他写保护)。所以,我的选择是:

  • 在注册表中。 2个键在我自己的子键下。
  • 在一种ini文件中,存储在用户的数据目录(AppData)中。这也可能允许以后扩展(像保存更多的信息,其中一些可能不适合注册表)。

任何小费?其他选择?我倾向于使用我自己的子文件夹去AppData目录 - 仅仅因为它是一个很好的准备,以便稍后保持像配置的本地副本等。

回答

1

加密,并将其保存在注册表中。

1

您可以作为用户设置存储在app.config中(所以它们在更改后并不真正存储在app.config中,但可以使用相同的API访问)。

这里看到更多的信息,关于适用范围:

http://msdn.microsoft.com/en-us/library/a65txexh%28VS.80%29.aspx

+0

而究竟如何将这个允许用户写入的应用程序目录。即使一个user.config生活在那里也不会被每个Windows实践和准则写入(它使应用程序目录进入正常用户的只读模式)。 – TomTom 2010-04-26 09:05:46

+0

它不会,它会自动将user.config文件存储在可写目录中,但应用程序仍然可以使用Properties.Settings读取和写入设置,而无需关心此问题。 – 2010-04-26 09:28:42

+1

你可以在这里找到更多关于它存储在哪里的信息:http://msdn.microsoft.com/en-us/library/ms379611%28VS.80%29.aspx – 2010-04-26 09:30:06

0

怎么做dineshrekula下面wrote

using System.Security; 
using System.Security.Cryptography; 

var guid = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(System.Runtime.InteropServices.GuidAttribute), false); 
this.entropy = Encoding.UTF8.GetBytes((guid[0] as System.Runtime.InteropServices.GuidAttribute).Value); 

private SecureString Unprotect(byte[] data) 
{ 
    return UTF8Encoding.UTF8.GetString(ProtectedData.Unprotect(data, this.entropy, DataProtectionScope.CurrentUser)).ToSecureString(); 
} 

private void Protect(string data) 
{ 
    ProtectedData.Protect(UTF8Encoding.UTF8.GetBytes(data), this.entropy, DataProtectionScope.CurrentUser) 
}