GVKun编程网logo

保存configuration文件(Windows应用程序)以外的configuration数据的位置?(使用外部文件保存数据)

24

本篇文章给大家谈谈保存configuration文件,以及Windows应用程序以外的configuration数据的位置?的知识点,同时本文还将给你拓展2部分Windows应用程序:“Windows

本篇文章给大家谈谈保存configuration文件,以及Windows应用程序以外的configuration数据的位置?的知识点,同时本文还将给你拓展2部分Windows应用程序:“Windows服务”+ GUI来configuration它、Commons Configuration之二基本特性和AbstractConfiguration、Commons-Configuration2-CombinedConfiguration无法识别标签、configuration Joomla下利用configurationphp存储简单数据等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

保存configuration文件(Windows应用程序)以外的configuration数据的位置?(使用外部文件保存数据)

保存configuration文件(Windows应用程序)以外的configuration数据的位置?(使用外部文件保存数据)

我的Windows应用程序GUI正在接受来自用户的一些必需的应用程序configuration字段。 我当然需要存储它们,但我想隐藏用户的这些字段。

我不能使用数据库来存储这些configuration。

我想避免使用app.config。 (没有app.configencryption)

任何build议,我应该在哪里和以哪种格式存储字段。 (字段示例是:接受​​数据库用户凭证,任务计划信息等)

Windowssearchsql:LIKE语句中的分号导致exception(E_FAIL 0x80004005)

如何从我的iOS应用程序保存文本文件到PC?

如何在lua中保存剪贴板(Windows)

C ++ – 无法在Windows中从networkingpath打开文件

WIndows:subprocess制作新的控制台窗口,丢失stdin / out

我会使用一个XML文件(如果您觉得有必要,请进行加密)并使用

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

将其存储在用户文件系统的%AppData%部分中。

此外,您可以编写一个Settings类,将其序列化到磁盘并反序列化到内存 – 这可以为您节省一些XML命名空间的持久性逻辑。

这些是可能的:(但疯狂和坏的想法):1.注册表2.创建您自己的自定义设置文件3.加密他们4.编写一个Web服务API并将它们存储在Web服务器上

您可以随时编写自己的XML文件,并使用.NET加密类来加密数据。

http://msdn.microsoft.com/en-us/library/ms229749.aspx

将细节加密到一个XML文件?

使用rijndael加密,你可以解密时,你需要它。

它被称为Windows注册表 。 我讨厌推荐使用它,但我认为它符合你的要求,它的使用相当普遍。

总结

以上是小编为你收集整理的保存configuration文件(Windows应用程序)以外的configuration数据的位置?全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

2部分Windows应用程序:“Windows服务”+ GUI来configuration它

2部分Windows应用程序:“Windows服务”+ GUI来configuration它

我正在研究一个由两部分组成的Windows应用程序:

一个代理,在后台运行。

带窗口的主要应用程序,用于启动/停止代理程序并对其进行configuration。

我所理解的是我应该为代理使用“windows服务”。

但我不知道这应该如何打包? (我可以在同一个.exe中有这两个部分?)

以及代理和主应用程序如何进行通信(我应该使用共享文件吗?我的代理是否可以使用私人文件夹?)

我基本上在寻找一些架构build议

在Windows上使用RMarkdown执行bash(Git-Bash)

试图在Python中创build一个打印计算器程序,程序输出0无限

Bower安装包EPERM重命名错误

在Windows上安装dm-types。 (Win7 x64)

确定文件夹ACL是否从.NET中的特定date开始被修改

IOError:权限被拒绝

获取另一个程序的值

如何在Windows Phone 8.1中清除caching导航caching模式

如何开发Windows 2008 64位的C#控制台应用程序?

`os.rmdir`不能在空目录下工作?

您将需要分开.exe文件,一个为服务和一个为Windows应用程序。 你可以在Visual Studio中打包这两个独立的MSI,这样做的好处是,如果你需要移动服务(无论出于什么原因),那么你也不会打包Windows应用程序并将其留在你安装服务的地方。

有不同的方式可以让他们沟通而不会大量复杂。 您可以从文本文件中读取,正如您所建议的那样,但这可能会导致锁定问题。 当我不得不做类似的事情时,我在sql创建了一个简单的数据库(或者你希望的任何品牌的数据库),然后让Windows应用程序向表中插入/更新配置选项,然后服务读取表来获取它的设置。

将代理作为服务运行可能是最好的选择。 它将在没有任何人需要登录的情况下运行,并且Windows为服务提供广泛的监视支持。 您可以使用sc命令来安装,启动和停止服务,如果您拥有适当的权限,它甚至可以支持在其他计算机上控制服务。

为了让你的GUI与它沟通,你可以看看使用WCF。 它将允许您定义与C#类的服务交互,并且可以节省您不必担心检查共享目录或查看共享文件等问题。这种方法还可以轻松地同时支持多个客户端,像共享文件夹的方法会使这个困难。

Commons Configuration之二基本特性和AbstractConfiguration

Commons Configuration之二基本特性和AbstractConfiguration

Configuration接口定义一大堆方法。一切从头开始实现这些方法非常困难。因为AbstractConfiguration类存在。该类在Commons Configuration中充当大多数Configuration实现的共同基类并提供了接口需要的大量功能。因此创建一个自定义Configuration实现该类将是一个很好的起点。
除了基本实现声明在Configuration接口中的方法之外,AbstractConfiguration类提供一些其它的便利特性。因为该类是在Commons Configuration类层次结构的根,这些特性对该类库提供的Configuration接口的大多数特定实现都是有效的。

1    处理缺失属性

如果你传入一个键给它的get方法之一,不能映射到一个已存在的属性,配置对象该做什么?AbstractConfiguration实现的默认行为是如果返回值是对象类型返回null。对于原始类型作为返回null(或任意特定值)是不可能的,因此,在这种情况下一个NoSuchElementException抛出:

// 如果没有键为"NonExistingProperty"的属性将返回null
String strValue = config.getString("NonExistingProperty");

// 如果没有键为"NonExistingProperty"的属性将抛出一个NoSuchElementException异常
long longValue = config.getLong("NonExistingProperty");

对于对象类型,像String、BigDecimal或BigInteger这种默认行为可以改变:如果setThrowExceptionOnMissing()方法使用一个true参数调用,这些方法将像原始类型一样,如果传入的属性键不能解析抛出一个异常。

注意:不幸的是支持throwExceptionOnMisssing属性不总是一致:getList()和getStringArray()不计算该标记,如果请求属性没有找到返回一个空list或数组。也许这种行为将在未来的重要版本改变。

2    List处理

使用Configuration接口定义的getList()和getStringArray()方法处理多值属性。当一个配置源(例如properties文件、XML文档或JNDI上下文)处理相应Configuration实现发现这么一个有多个值的属性并确保该数据正确存储。

当修改属性时,AbstractConfiguration的addProperty()和setProperty()方法也实现特定list处理。传入这些方法的属性值可以是list或数组产生一个多值属性。如果属性值是字符串,它检测是否字符串包含list分隔符。如果是这种情况,字符串被分割,并且它单个部分被添加。list分隔符默认是逗号。当配置源被加载时,它在考虑之内(例如,属性的字符串值将被检测是否包含分隔符)。通过使用setListDelimiter()方法你能设置它为一个不同的字符。

// 改变list分隔符为斜线
config.setListDelimiter(''/'');
// 现在添加一些属性
config.addProperty("greeting", "Hello, how are you?");
config.addProperty("colors.pie", new String[] { "#FF0000", "#00FF00", "#0000FF" });
config.addProperty("colors.graph", "#808080/#00FFCC/#6422FF");

// 访问数据
String salut = config.getString("greeting");
List<Object> colPie = config.getList("colors.pie");
String[] colGraph = config.getStringArray("colors.graph");

String firstPieColor = config.getString("colors.pie");

在该例子中,list分隔符从逗号变为斜线。因为greeting属性没有分割,而是保存为单个字符串。作为字符串传入的colors.graph属性相反包含新的分隔符因此产生一个三个值的属性。注意,list是Object类型。这是因为不知道属性值的具体类型。例如,如果你调用addProperty("answer", 42),一个Integer对象将存储在配置中。

感兴趣的是例子片段的最后一行。调用的getString()方法有多个值。这将返回list的第一个值。

如果你想要改变所有配置对象的list分隔符,你可以使用AbstractConfiguration的静态setDefaultListDelimiter()方法。也可以通过调用使用true的setDelimiterParsingDisabled()方法禁用所有的Configuration实例的字符串属性的切分。

3    变量插值

如果你熟悉Ant或Maven,你肯定已经遇到了变量(像,${token})当配置文件被加载时,变量被自动解释。Commons Configuration也支持这些特性。

application.name = Killer App
application.version = 1.6.2

application.title = ${application.name} ${application.version}

如果你现在检索application.title的属性值,结果将是Killer App 1.6.2。以至于每个默认变量被解释为其它属性的键。这只是特殊的情况,变量名的通用语法是${prefix:name}。prefix告诉Commons Configuration变量在某一上下文中计算。我们可以看到,如果prefix缺失,上下文是当前配置实例。以下是默认支持的prefix名称。

前缀
描述
sys
该前缀标记一个变量是系统属性。Commons Configuration将使用指定名称搜索一个系统属性并通过该值替换变量。这非常容易的在每个配置实现中访问系统属性的值。
const const前缀表示一个变量解释为一个类的常量成员字段(例如,使用static final修饰符的字段)。变量的名字必须是<完全限定类名>.<字段名>的形式。指定类将被加载并且该字段的值将被获取。
env 变量也能引用特定OS环境变量。这通过evn前缀表示。

下面是一些例子,只针对Properties文件:

PropertiesConfiguration cfg = new PropertiesConfiguration("cfg/basic/vm.properties");
System.out.println(cfg.getString("vm.name"));
System.out.println(cfg.getString("vm.author"));
System.out.println(cfg.getString("vm.home"));
System.out.println(cfg.getString("vm.bin"));

public interface Const {

    public static final String AUTHOR = "Evan";
    
}


#相当于System.getProperty("java.runtime.name")

vm.name=${sys:java.runtime.name}
vm.author=${const:cfg.basic.Const.AUTHOR}

#相当于System.getEnv("JAVA_HOME")

vm.home=${env:JAVA_HOME}
vm.bin=${vm.home}\bin

如果一个变量不能解析,例如,因为名称无效或未知前缀,它不能被替换,但返回包括美元符号和大括号。

3    自定义插值

本节阐述你如何添加自己的插值。使用Commons Lang的text包下的StrSubstitutor类实现插值引擎。该类使用派生自StrLookup类的对象解析变量。StrLookup定义简单lookup()方法必须通过自定义实现;它期望变量名作为参数并返回相应的值(更多细节可以在Commons Lang的文档中找到)。我们已经介绍了标准的前缀变量,到目前为止我们确实已经实现派生自StrLookup的特定类。

现在可以创建你自己的StrLookup实现并使它在一个自定义前缀上对所有配置对象有效。我们将介绍如何实现。第一步是创建一个新类派生StrLookup,必须实现lookup()方法。作为一个例子,我们实现一个简单的查询对象仅仅返回一个传入的变量的回执:

import org.apache.commons.lang.text.StrLookup;

public class EchoLookup extends StrLookup
{
    public String lookup(String varName)
    {
        return "Value of variable " + varName;
    }
}

现在,我们想要该类使用前缀echo调用变量。为了这个目的EchoLookup类必须在ConfigurationInterpolator类使用期望前缀注册。 ConfigurationInterpolator在Commons Lang定义的StrLookup API中实现一个简单的包装器。它有一个静态registerGlobalLookup()方法,我们必须如下调用:

// 放置该代码在你的应用程序初始化的地方
ConfigurationInterpolator.registerGlobalLookup("echo", new EchoLookup());

每个在该行代码之后创建的AbstractConfiguration对象将包含新的查询类并能因此解析${echo:my_variable}形式的变量。

每个AbstractConfiguration实例关联一个ConfigurationInterpolator对象。该对象在第一次访问插值特性之一时通过createInterpolator()方法创建。通过覆盖该方法可能更深入的干预插值机制。例如自定义实现能添加更高级的查询对象到插入器。

4    使用表达式(此处没有明白如何使用,请高人指点一二)

除了前面描述的简单的查找机制,Commons Configuration提供ExprLookup,使用Apache Commons Jexl允许表达式解析是否一个StrLookup被允许。如果ExprLookup被配置,该例子显示显示获取系统属性的替代方式。

user.file = ${expr:System.getProperty("user.home"}/settings.xml

ExprLookup默认被禁用,必须通过DefaultConfigurationBuilder手动添加或配置。使用Maven 2构建并引用Commons Configuration将不包括Jexl依赖,因此如果该特性被使用必须手动添加依赖到项目。

使用DefaultConfigurationBuilder添加ExprLookup是直接的。

<configuration>
  <header>
    <result/>
    <lookups>
      <lookup config-prefix="expr"
              config->
        <variables>
          <variable name="System" value="Class:java.lang.System"/>
          <variable name"net" value="Class:java.net.InetAddress"/>
          <variable name="String" value="Class:org.apache.commons.lang.StringUtils"/>
        </variables>
      </lookup>
    </lookups>
  </header>
  <override>
    <xml fileName="${expr:System.getProperty(''basePath'') +
         String.lowercase(net.localHost.hostName) + ''/testMultiConfiguration_default.xml''}"
         config-name="defaultConfig" delimiterParsingDisabled="true">
    </xml>
  </override>
</configuration>

上面的例子显示如何在表达式计算期间调用静态方法。下一个例子显示使用下级查询混合表达式计算获取“basePath”系统属性。注意获取系统属性和之前例子的差异。

<configuration>
  <header>
    <result/>
    <lookups>
      <lookup config-prefix="expr"
              config->
        <variables>
          <variable name"net" value="Class:java.net.InetAddress"/>
          <variable name="String" value="Class:org.apache.commons.lang.StringUtils"/>
        </variables>
      </lookup>
    </lookups>
  </header>
  <override>
    <xml fileName="${expr:$[sys:basePath] +
         String.lowercase(net.localHost.hostName) + ''/testMultiConfiguration_default.xml''}"
         config-name="defaultConfig" delimiterParsingDisabled="true">
    </xml>
  </override>
</configuration>











Commons-Configuration2-CombinedConfiguration无法识别标签

Commons-Configuration2-CombinedConfiguration无法识别标签

如何解决Commons-Configuration2-CombinedConfiguration无法识别标签?

我正在尝试创建commons-configuration2构建器,该构建器将生成基于xml的组合配置,该配置可以解析自定义标记,也可以使用apache XPathExpressionEngine提供的配置。配置需要具有两个属性-验证和架构。但是,我不能使其适用于所有情况。现在,我有以下生成器:

 builder = new MyCombinedConfigurationBuilder()
                    .configure(
                            params.combined()
                                    .registerProvider("xmlschema",xmlSchemaConfigurationProvider)
                                    .setDeFinitionBuilderParameters(
                                            params.xml().setFileName(bootstrapConfig).setExpressionEngine(new XPathExpressionEngine())));

XmlSchemaConfigurationProvider看起来像这样:

public class XmlSchemaConfigurationProvider extends BaseConfigurationBuilderProvider
{
    public XmlSchemaConfigurationProvider()
    {
        super(MyCombinedConfigurationBuilder.class.getName(),null,XmlSchemaConfiguration.class.getName(),Arrays.asList(XmlSchemaParameters.class.getName(),CombinedBuilderParametersImpl.class.getName()));
    }
}

参数如下:

public class XmlSchemaParameters extends XMLBuilderParametersImpl
{
    private boolean validate = false;

    private String schema = null;

    public boolean isValidate()
    {
        return validate;
    }

    public void setValidate(boolean validate)
    {
        this.validate = validate;
    }

    public String getSchema()
    {
        return schema;
    }

    public void setSchema(String schema)
    {
        this.schema = schema;
    }
}

构建器是这样的:

public class MyCombinedConfigurationBuilder extends CombinedConfigurationBuilder
{

    public MyCombinedConfigurationBuilder(Class<?> resCls,Map<String,Object> params,boolean allowFailOnInit)
    {
        super(params,allowFailOnInit);
    }

        public MyCombinedConfigurationBuilder()
    {
        super();
    }

    @Override
    protected void initSystemProperties(HierarchicalConfiguration<?> config,String basePath) throws ConfigurationException
    {
    }

    @Override
    protected ConfigurationBuilder<? extends HierarchicalConfiguration<?>> createXMLDeFinitionBuilder(BuilderParameters builderParams)
    {
        return super.createXMLDeFinitionBuilder(builderParams);
    }

}

当我使用xml这样运行它时:

<configuration>
  <override>
    <xmlschema fileName="test.xml" schema="test.xsd" validate="true" />
  </override>
</configuration>

和test.xml:

<env>
  <InstallPath>D:/ex/env</InstallPath>
</env>

但我保留以下例外情况:

org.apache.commons.configuration2.ex.ConfigurationException: Unsupported configuration source: InstallPath
    at org.apache.commons.configuration2.builder.combined.CombinedConfigurationBuilder$ConfigurationSourceData.createConfigurationBuilder(CombinedConfigurationBuilder.java:1568) ~[commons-configuration2-2.7.jar:2.7]
    at org.apache.commons.configuration2.builder.combined.CombinedConfigurationBuilder$ConfigurationSourceData.createAndAddConfigurations(CombinedConfigurationBuilder.java:1467) ~[commons-configuration2-2.7.jar:2.7]
    at org.apache.commons.configuration2.builder.combined.CombinedConfigurationBuilder.initResultInstance(CombinedConfigurationBuilder.java:797) ~[commons-configuration2-2.7.jar:2.7]
    at org.apache.commons.configuration2.builder.combined.CombinedConfigurationBuilder.initResultInstance(CombinedConfigurationBuilder.java:236) ~[commons-configuration2-2.7.jar:2.7]
    at org.apache.commons.configuration2.builder.BasicConfigurationBuilder.createResult(BasicConfigurationBuilder.java:420) ~[commons-configuration2-2.7.jar:2.7]
    at org.apache.commons.configuration2.builder.BasicConfigurationBuilder.getConfiguration(BasicConfigurationBuilder.java:284) ~[commons-configuration2-2.7.jar:2.7]
    at org.apache.commons.configuration2.builder.combined.CombinedConfigurationBuilder$ConfigurationSourceData.addChildConfiguration(CombinedConfigurationBuilder.java:1600) ~[commons-configuration2-2.7.jar:2.7]
    at org.apache.commons.configuration2.builder.combined.CombinedConfigurationBuilder$ConfigurationSourceData.createAndAddConfigurations(CombinedConfigurationBuilder.java:1474) ~[commons-configuration2-2.7.jar:2.7]
    at org.apache.commons.configuration2.builder.combined.CombinedConfigurationBuilder.initResultInstance(CombinedConfigurationBuilder.java:797) ~[commons-configuration2-2.7.jar:2.7]
    at org.apache.commons.configuration2.builder.combined.CombinedConfigurationBuilder.initResultInstance(CombinedConfigurationBuilder.java:236) ~[commons-configuration2-2.7.jar:2.7]
    at org.apache.commons.configuration2.builder.BasicConfigurationBuilder.createResult(BasicConfigurationBuilder.java:420) ~[commons-configuration2-2.7.jar:2.7]
    at org.apache.commons.configuration2.builder.BasicConfigurationBuilder.getConfiguration(BasicConfigurationBuilder.java:284) ~[commons-configuration2-2.7.jar:2.7]

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

configuration Joomla下利用configurationphp存储简单数据

configuration Joomla下利用configurationphp存储简单数据

写入过程

复制代码 代码如下:


// Get the path of the configuration file
$fname = JPATH_CONFIGURATION.DS.''configuration.php'';
// clear cache
$cache = JFactory::getCache();
$cache->clean();
// Update the credentials with the new settings
$config =& JFactory::getConfig();
$config->setValue(''config.custom_var'', ''xxx'');
// Get the config registry in PHP class format and write it to configuation.php
jimport(''joomla.filesystem.file'');
if (!JFile::write($fname, $config->toString(''PHP'', ''config'', array(''class'' => ''JConfig'')))) {
die(JText::_(''ERRORCONFIGFILE''));
}


提取过程

复制代码 代码如下:


global $mainframe;
$mainframe->getCfg(''custom_var'');

以上就介绍了configuration Joomla下利用configurationphp存储简单数据,包括了configuration方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

关于保存configuration文件Windows应用程序以外的configuration数据的位置?的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于2部分Windows应用程序:“Windows服务”+ GUI来configuration它、Commons Configuration之二基本特性和AbstractConfiguration、Commons-Configuration2-CombinedConfiguration无法识别标签、configuration Joomla下利用configurationphp存储简单数据等相关知识的信息别忘了在本站进行查找喔。

本文标签: