2016-11-24 46 views
1

在这里,我们有一个由各种用户使用的winforms桌面应用程序。每个用户在本地运行应用程序。也就是说,构建文件夹对每个用户都是分开的。他们在本地应用程序配置文件下还有不同的配置密钥集来运行应用程序(不同的连接字符串和密钥选项)。你可能会猜测更新版本有多痛苦。单独用户的单独配置文件

我的目的是将这个winforms桌面应用程序放在一个共享文件夹中并将其共享给每个用户。这里的挑战是他们的配置是分开的。

我尝试合并不同名称的单独键和使用代码下的条件,但工作似乎很大。

有什么办法可以收集bin文件夹下的所有这些单独的配置文件,并根据用户名在它们之间切换?接近这个问题最简单的方法是什么?

谢谢。

+0

应用程序是否使用数据库连接?最好在中央数据库表中配置所有用户特定的值,并在应用程序初始化时映射它们。 –

+0

我建议使用便携式SQLite数据库,以便为每个用户存储设置。注意:应用程序需要访问权限才能读取写入SQLite数据库 – GauravKP

+0

@SouvikGhosh感谢您的建议。由于每台计算机的连接驱动程序不同,即使DB密钥也有不同的值,所以它可能不是最好的方法。 –

回答

0

我的建议是使用修改的.NET设置机制。一般来说,您可以具有特定于应用程序和用户的特定设置在这种情况下,我们想使用用户设置。

这种方法的问题是,用户设置不存储在bin文件夹,但其他地方也就是%USERPROFILE%\应用程序数据\本地...here是详细信息)。但是,您可以通过编写自定义设置提供程序来覆盖此行为。幸运的是有人已经做到了。从这answerCustomSettingsProvider作品像一个魅力。

总之这里是一个解决方案:

  • 为了添加一个设置文件到您的项目右击 项目,然后选择添加 - >新项... Finnally,发现 设置文件模板。如果双击添加的文件,设计师将弹出。我们假设这个文件叫做MySettings
  • 定义一些用户特定设置。

  • CustomSettingsProvider添加到您的项目中。

  • 查找项目MySettings类和以下属性添加到它:

[System.Configuration.SettingsProvider(typeof(CustomSettingsProvider))]

  • 在使用设置之前,您必须指定文件的路径。我建议把它作为你应用程序中的第一件事。在下面的例子中设置文件在当前文件夹中创建,他们的名字将包含用户名:

MySettings.Default.SettingsKey = [email protected]".\user_{Environment.UserName}.config";

  • 如果有设置的文件不存在CustomSettingsProvider将创建一个空的。
  • 当关闭应用程序调用MySettings.Default.Save();将用户设置保存到文件。
  • 只需运行一次自己的应用程序即可创建模板文件。然后为其他用户相应地更改其名称的副本。
  • 我的方法的缺点是在设置文件中没有连接字符串部分。所以参考ConfigurationManager.ConnectionStrings,您将不得不用MySettings.PropertyWithConnectionString的引用来替换。
+0

谢谢您的详细建议。我会尝试这种方法。我会通知你并且决定相应地标记你的答案。 –

+0

我采用了不同的方法。我没有经过这些步骤。我会接受你的努力的答案。谢谢。 –