使用Microsoft.Practices.EnterpriseLibrary.Data,如何对App.Config进行动态生成

calen 2009-09-03 05:59:12
原因是这样的,把App.config放在本地路径下,总是会被别人看到,即使采用了加密手段,也还是会有少许问题,客户提出使用加密狗的模式,也就是把App.config中的数据库连接部分存放在加密狗中,插入狗,程序读取,然后连接数据库。

问题是我现在使用Microsoft.Practices.EnterpriseLibrary.Data,好像仅传入connectionStrings,Microsoft.Practices.EnterpriseLibrary.Data就会自行读取里头的内容,我如何在系统运行时,动态修改App.config的内容?而且不进行存盘处理。
...全文
1032 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
weng3998 2011-11-27
  • 打赏
  • 举报
回复
随便 写个算法 把密码变一下 。 看见的config 密码 是要变换的。 看了也没用。
v_chensheng 2010-01-21
  • 打赏
  • 举报
回复
up
qlzf11140820 2009-09-22
  • 打赏
  • 举报
回复
up
calen 2009-09-22
  • 打赏
  • 举报
回复
试试看了,多谢
cnming 2009-09-15
  • 打赏
  • 举报
回复



System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None);

config.AppSettings.Settings["PortName"].Value = this.textBox1.Text;
config.Save(System.Configuration.ConfigurationSaveMode.Modified);
System.Configuration.ConfigurationManager.RefreshSection("appSettings");

this.textBox1.Text = System.Configuration.ConfigurationManager.AppSettings["PortName"].ToString();



使用这个方法,不会修改config文件,但是从此之后使用System.Configuration.ConfigurationManager.AppSettings读取出来的内容已经是修改过的值了,唯一不清楚的是Microsoft.Practices.EnterpriseLibrary是否还是会调用到这个结果
cnming 2009-09-15
  • 打赏
  • 举报
回复
暂时还没有见到过支持的
calen 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 lzsh0622 的回复:]
楼主的想法可以实现 App.config本来就只是个存放简单配置信息的文件,改一下用法就行了:

1. 把App.config中的相关信息以静态变量的方式存入一个全局静态类中.
  开发过程中,直接赋值,便于调试。
  把调用App.config信息的代码改成调用静态变量。

2.发布时,把信息存入到软件锁中
 软件源代码中,静态变量置空

3.运行时,先读锁验证,再读配置信息,
  把值给全局静态类的静态变量。

另外注意:软件锁不是作为存储器设计的,寿命不长,这样当存储介质使用,不知能否用三、五年。
[/Quote]


我用的是新型的加密锁,可以支持存储,就是使用flash,10万次的擦写


calen 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zzxap 的回复:]
C# code
读取connectionStrings配置节///<summary>///依据连接串名字connectionName返回数据连接字符串///</summary>///<param name="connectionName"></param>///<returns></returns>privatestaticstring GetConnectionStringsConfig(str¡­
[/Quote]


这个方法还是保存成config文件了,因此不能用
lzsh0622 2009-09-10
  • 打赏
  • 举报
回复
楼主的想法可以实现 App.config本来就只是个存放简单配置信息的文件,改一下用法就行了:

1. 把App.config中的相关信息以静态变量的方式存入一个全局静态类中.
  开发过程中,直接赋值,便于调试。
  把调用App.config信息的代码改成调用静态变量。

2.发布时,把信息存入到软件锁中
 软件源代码中,静态变量置空

3.运行时,先读锁验证,再读配置信息,
  把值给全局静态类的静态变量。

另外注意:软件锁不是作为存储器设计的,寿命不长,这样当存储介质使用,不知能否用三、五年。
zzxap 2009-09-10
  • 打赏
  • 举报
回复


1.获取连接字符串

///

///依据连接串名字connectionName返回数据连接字符串

///

///

///

private static string GetConnectionStringsConfig(string connectionName)
{

string connectionString = string.Empty;
if (ConfigurationManager.ConnectionStrings[connectionName] != null)
{
connectionString = ConfigurationManager.ConnectionStrings[connectionName].ConnectionString;
}
return connectionString;
}

2.更新连接字符串

///

///更新连接字符串

///

///连接字符串名称

///连接字符串内容

///数据提供程序名称

private static void UpdateConnectionStringsConfig(string newName, string newConString, string newProviderName)
{

bool isModified = false; //记录该连接串是否已经存在

//如果要更改的连接串已经存在

if (ConfigurationManager.ConnectionStrings[newName] != null)
{

isModified = true;

}

//新建一个连接字符串实例

ConnectionStringSettings mySettings =

new ConnectionStringSettings(newName, newConString, newProviderName);

// 打开可执行的配置文件*.exe.config

Configuration config =

ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

// 如果连接串已存在,首先删除它

if (isModified)
{

config.ConnectionStrings.ConnectionStrings.Remove(newName);

}

// 将新的连接串添加到配置文件中.

config.ConnectionStrings.ConnectionStrings.Add(mySettings);

// 保存对配置文件所作的更改

config.Save(ConfigurationSaveMode.Modified);

// 强制重新载入配置文件的ConnectionStrings配置节

ConfigurationManager.RefreshSection("ConnectionStrings");

}


3.获取AppSettings指点项



///
///返回*.exe.config文件中appSettings配置节的value项
///
///
///
private static string GetAppConfig(string strKey)
{
foreach (string key in ConfigurationManager.AppSettings)
{
if (key == strKey)
{
return ConfigurationManager.AppSettings[strKey];
}
}

return null;
}


4.添加更新AppSettings指点项



///
///在*.exe.config文件中appSettings配置节增加一对键、值对
///
///
///
private static void UpdateAppConfig(string newKey, string newValue)
{
bool isModified = false;

foreach (string key in ConfigurationManager.AppSettings)
{
if (key == newKey)
{
isModified = true;
}
}

// Open App.Config of executable

Configuration config =
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

// You need to remove the old settings object before you can replace it

if (isModified)
{
config.AppSettings.Settings.Remove(newKey);
}

// Add an Application Setting.

config.AppSettings.Settings.Add(newKey, newValue);

// Save the changes in App.config file.

config.Save(ConfigurationSaveMode.Modified);

// Force a reload of a changed section.

ConfigurationManager.RefreshSection("appSettings");
}

zzxap 2009-09-10
  • 打赏
  • 举报
回复

读取connectionStrings配置节

///<summary>

///依据连接串名字connectionName返回数据连接字符串

///</summary>

///<param name="connectionName"></param>

///<returns></returns>

private static string GetConnectionStringsConfig(string connectionName)

{

string connectionString =

ConfigurationManager.ConnectionStrings[connectionName].ConnectionString.ToString();

Console.WriteLine(connectionString);

return connectionString;

}

4.2 更新connectionStrings配置节

///<summary>

///更新连接字符串

///</summary>

///<param name="newName">连接字符串名称</param>

///<param name="newConString">连接字符串内容</param>

///<param name="newProviderName">数据提供程序名称</param>

private static void UpdateConnectionStringsConfig(string newName,

string newConString,

string newProviderName)

{

bool isModified = false; //记录该连接串是否已经存在

//如果要更改的连接串已经存在

if (ConfigurationManager.ConnectionStrings[newName] != null)

{

isModified = true;

}

//新建一个连接字符串实例

ConnectionStringSettings mySettings =

new ConnectionStringSettings(newName, newConString, newProviderName);

// 打开可执行的配置文件*.exe.config

Configuration config =

ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

// 如果连接串已存在,首先删除它

if (isModified)

{

config.ConnectionStrings.ConnectionStrings.Remove(newName);

}

// 将新的连接串添加到配置文件中.

config.ConnectionStrings.ConnectionStrings.Add(mySettings);

// 保存对配置文件所作的更改

config.Save(ConfigurationSaveMode.Modified);

// 强制重新载入配置文件的ConnectionStrings配置节

ConfigurationManager.RefreshSection("ConnectionStrings");

}

4.3 读取appStrings配置节

///<summary>

///返回*.exe.config文件中appSettings配置节的value项

///</summary>

///<param name="strKey"></param>

///<returns></returns>

private static string GetAppConfig(string strKey)

{

foreach (string key in ConfigurationManager.AppSettings)

{

if (key == strKey)

{

return ConfigurationManager.AppSettings[strKey];

}

}

return null;

}

4.4 更新connectionStrings配置节

///<summary>

///在*.exe.config文件中appSettings配置节增加一对键、值对

///</summary>

///<param name="newKey"></param>

///<param name="newValue"></param>

private static void UpdateAppConfig(string newKey, string newValue)

{

bool isModified = false;

foreach (string key in ConfigurationManager.AppSettings)

{

if(key==newKey)

{

isModified = true;

}

}

// Open App.Config of executable

Configuration config =

ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

// You need to remove the old settings object before you can replace it

if (isModified)

{

config.AppSettings.Settings.Remove(newKey);

}

// Add an Application Setting.

config.AppSettings.Settings.Add(newKey,newValue);

// Save the changes in App.config file.

config.Save(ConfigurationSaveMode.Modified);

// Force a reload of a changed section.

ConfigurationManager.RefreshSection("appSettings");

}


calen 2009-09-10
  • 打赏
  • 举报
回复
up
youdandan 2009-09-10
  • 打赏
  • 举报
回复
有點深噢,up
freeboy827 2009-09-10
  • 打赏
  • 举报
回复
用remoting返回连接串
calen 2009-09-10
  • 打赏
  • 举报
回复
目的是在于退出程序,或者拔掉加密设备,这些连接信息就不存在客户端了
calen 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyq11 的回复:]
参考
[/Quote]

这个链接提到的好像还是要建立一个配置文件,只是这个配置文件可以不是App.config,但是我目前希望的是这个config文件不被保存在硬盘中,由程序在运行过程中有内存中创建。
aadss 2009-09-06
  • 打赏
  • 举报
回复
帮顶
gisyellow 2009-09-03
  • 打赏
  • 举报
回复
楼上的链接有相关内容,帮顶。。
wuyq11 2009-09-03
  • 打赏
  • 举报
回复
狼王_ 2009-09-03
  • 打赏
  • 举报
回复
板凳 可惜我不会
加载更多回复(1)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧