我正在尝试加载一个SQLite数据库,该数据库将作为资源嵌入我的可执行文件中.对于那些好奇的人来说,这是因为我使用一个小的SQLite数据库来存储配置数据,并且我想发布嵌入在可执行文件中的默认配置(我讨厌必须随文件携带文件).
这只是默认配置.也就是说,我不需要修改此配置.它是静态的,在我的程序构建完成后无法更改.
我正在使用SQLite的System.Data.SQLite包装器.
我可以像这样访问字节流:
using (var stream =
Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) {
// use of "stream" here.
}
Run Code Online (Sandbox Code Playgroud)
但是,关于SQLiteConnection从此流创建对象,我感到很茫然.
简单的方法是在每次程序加载时简单地生成一个新的配置文件,然后告诉SQLite从该文件中读取.这可能会工作,但我想避免这种技术 - 我打算重用我解决这个问题还包括国际化的支持(其中每种语言是[压缩] SQLite数据库和默认语言嵌入可执行文件 - 一个用户可以添加其他语言,只需将其他语言数据库复制到程序的工作目录中).
我不关心在内存中保存这个数据库的内存成本.它会非常小(可能小于50 KiB),所以这不会打扰我.显然,如果这是一个更大的数据库,这可能是一个问题.
最后,我知道这可能被视为存储配置的一种糟糕方式.虽然我同意基于纯文本的解决方案适用于用户手动输入所有设置的情况,但这主要用于用户未明确定义的设置.例如,将各种停靠窗口的位置存储在应用程序中,或存储有关可能找到内部资源的位置的数据.
谢谢您的帮助.
我正在Windows 7上编写一个小型.NET程序.它需要做的一件事是创建符号链接,这似乎要求我拥有管理员权限.它还需要能够使用映射的网络驱动器(例如,R:\,在我的系统映射到它\\titanium\Private\).
我Directory.Exists(path)用来验证路径是否存在.
以普通用户(管理员帐户,但不是"管理员")运行程序时,这在映射的网络驱动器上运行正常.
以管理员身份运行程序(使用UAC)时,无法找到存在的目录.结果,程序拒绝确认这R:\Steam Games\是一个实际存在的目录.
我有点困惑为什么会发生这种情况.使用完整的UNC路径(\\titanium\Private\Steam Games\)也不起作用.
有没有人遇到过这个?有什么好的解决方法吗?我是否必须格式化不同的路径(注意:它们中的大多数目前都是格式化的Path.Combine,因此它们应该是正确的).
谢谢你的帮助.
(例如,Directory.Exists(@"R:\Steam Games\")作为管理员运行时返回false,但该文件夹存在.当定期运行时,函数调用正确返回true).
编辑:问题确实似乎是管理员在技术上是一个不同的用户帐户.我甚至无法使用UNC路径,因为我只是在常规用户下登录到我的文件服务器,而不是在"管理员"下.作为一个(相对hackish)的解决方法,我只是使用常规权限运行我的程序,然后使用Process.Start参数创建符号链接(和动词"runas"以获取UAC提示)来调用cmd.exe实例.
我正在研究一个宠物项目(最终,当它完成时)允许安全的文件传输(除此之外还有更多,但其余的并不是特别相关).我想使用OpenSSL库,因为它似乎是最完整的免费加密库(我需要支持基本的对称加密和散列,以及SSL/TLS).
我正在寻求实现类似于 SSH 的安全方案.基本上,用户将使用TLSv1(SSLv3.1)连接到我的计算机.无论安全性如何,我都希望连接成功.然后,我希望能够检查用户使用的公钥(而不是整个证书).该密钥将与已知公钥进行比较,如果匹配,则允许用户访问某组命令.如果它不匹配,用户可以选择使用连接申请将他/她的公钥添加到我的集合中,但除此之外将无法访问我的服务.
我这里没有特别需要证书.如果我可以跳过所有证书详细信息并仅使用原始加密密钥,那对我来说会简单得多.这是因为此模型遵循Web信任模型,而不是大多数SSL/TLS连接使用的分层模型,因此我不需要任何CA或签名证书.
不幸的是,大多数OpenSSL的文档都是不存在的.我发现的所有相关文章似乎都在设置"标准"SSL/TLS连接,其中服务器的证书一直到一组根证书进行验证.这可能很有用,但我很难弄清楚如何启动和运行这些非传统的SSL连接.
任何人都可以建议任何可能帮助我弄清楚如何实现这一目标的文章或文档吗?
(OpenSSL的使用不是一成不变的,如果它能提供更好的方法来实现这一点,我可以切换到另一个库,以及散列[SHA-512]和对称加密[AES].我的目标是定位Linux,但如果最终产品可以移植到Windows那么会很好,所以我的朋友也可以使用它.)
我正在尝试在LaTeX中编写一个命令,它接受一个字符串,例如8:00A,并将其转换为分钟数,作为使用TikZ绘制课程表的脚本的一部分.但是,我遇到了一些问题 - 似乎LaTeX实际上并没有评估命令的内容.
我的命令目前是:
\newcommand{\timetominutes}[1]{
\IfSubStr{#1}{P}{720}{0}+\IfSubStr{#1}{P}{\StrBetween{#1}{:}{P}}{\StrBetween{#1}{:}{A}}+60*\StrBefore{#1}{:}
}
Run Code Online (Sandbox Code Playgroud)
如果从中打印出文本,它将正确计算从午夜开始的分钟数.但是,如果在另一个函数中使用,很明显它实际上并不运行任何这些命令 - 它只返回包含那些命令的文本.所以,如果我写:
\myfunc{\timetominutes{8:00A}}
Run Code Online (Sandbox Code Playgroud)
它看到了,而不是\myfunc看到有用的东西.这对我来说绝对没用,我无法找到一种方法来强制LaTeX在主要命令之前执行子命令.我假设有一种方法可以做到,但是LaTeX文档很少,我似乎找不到任何东西.0+00+60*8\IfSubStr{8:00A}{P}{720}{0}+\IfSubStr{8:00A}{P}{\StrBetween{8:00A}{:}{P}}{\StrBetween{8:00A}{:}{A}}+60*\StrBefore{8:00A}{:}
或者,如果有办法让LaTeX停止抱怨太多}s(当我有正确的数字时),那可能会有效.