我需要将数据库密码存储在配置文件中.出于显而易见的原因,我想加密它们(最好使用AES).有没有人知道Delphi实现很容易引入到现有项目中,其中包含超过10,000行的历史增长(URGH!)源代码?
澄清:简单意味着将单元添加到项目中,添加最多 5行代码,其中读取配置文件并使用它完成.不应该超过15分钟.
另一个澄清:需要密码才能创建与数据库的连接,而不是支持应用程序的用户管理方案.所以使用哈希没有帮助.db引擎检查密码是否有效,而不是应用程序.
我目前正在完成由其他人启动的应用程序.他正在使用app.config进行某些设置,并使用自定义xml文件进行其他部分.这让我疯狂,我想将配置合并到一个文件中.
但我不确定是否将所有内容都移到app.config中并抛出自定义xml文件,或者将所有内容移动到另一个文件中并忘记app.config.
我可以看到两个参数,每个选项一个:
但我确信现在还有很多东西比我想象的要多.这就是我要问的原因:
使用app.config存储配置与"传统"配置文件有什么优缺点?
我最近在部署Windows服务时遇到了问题.四台计算机没有造成任何问题,但在第五台计算机上由于异常而导致启动服务的任何尝试都失败了.异常堆栈跟踪被写入事件日志,因此我应该很容易确定原因:
protected override void OnStart(string[] args)
{
EventLog.WriteEntry("Starting service", EventLogEntryType.Information);
try
{
//...
base.OnStart(args);
}
catch (Exception ex)
{
EventLog.WriteEntry("Service can not start. Stack trace:" + ex.StackTrace, EventLogEntryType.Error);
Stop();
return;
}
EventLog.WriteEntry("Service started", EventLogEntryType.Information);
}
Run Code Online (Sandbox Code Playgroud)
但是,唉,没有任何信息写入日志.我终于将它追溯到正在编写的第一个日志条目.它引发了一个异常,因为应用程序事件日志已满,包含最近的条目,并且配置为仅覆盖超过7天的条目.
考虑到我无法更改应用程序事件日志的配置,写入事件日志的最佳做法是什么?
我应该总是放入EventLog.WriteEntry一个try块,如果是,我应该如何处理异常(将它写入事件日志可能是一个坏主意),我应该检查我的OnStart方法中的事件日志状态,还是你有更好的建议?
我正在为第三方函数库开发一个包装器,它与一些特殊硬件连接.所以基本上,我想封装DLL函数(bool Connect(),void Disconnect()与连接-和断开连接方法在MyHardwareObject等).
来自dll的Connect函数可以抛出一些特定的异常,例如当硬件不存在时.对于应用程序,有关connect方法失败原因的信息被认为是不重要的,因此不需要包含在异常中的附加信息.
处理这些异常,返回false或在此处未处理的异常的最佳方法是什么,并将其捕获到否则会处理connect方法返回的事实的级别false?
bool MyHardwareObject.Connect()
{
try
{
ThirdPartyLibrary.Connect();
}
catch (SomeException)
{
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
相反
bool MyHardwareObject.Connect()
{
ThirdPartyLibrary.Connect();
return true;
}
Run Code Online (Sandbox Code Playgroud)
(或者在第二种情况下更好void MyHardwareObject.Connect(),因为我们要么返回true,要么抛出异常?)
或者你还会做什么?最重要的是:为什么?
我最近不得不为同事开发的现有服务开发一个额外的模块.他在主要工作函数中放置了一个try/catch块,用于捕获冒泡到这个级别的所有未处理异常,将它们与堆栈跟踪信息一起记录下来:
try
{
// do main work
}
catch(Exception ex)
{
// log exception info
}
Run Code Online (Sandbox Code Playgroud)
虽然这使程序非常稳定(如'不太可能崩溃'),但我讨厌它,因为当我测试我的代码时,我没有看到由它引起的异常.当然,我可以查看异常日志并查看是否有新条目,但我非常喜欢在抛出异常时获得异常的直接反馈(请将光标放在代码的右侧).
我至少在编码和测试的时候删除了这个顶级的try/catch.但是现在我的任务已经完成,我必须决定是否将其重新用于发布,或者不是.我认为我应该这样做,因为它使服务更稳定,而且它的全部意义在于它在后台运行而无需任何监督.另一方面,我已经读过一个应该只调用特定的异常(如IoException),而不是一般Exception.
你对这个问题有什么建议?
顺便说一句,该项目是用C#编写的,但我也对非.NET语言的答案感兴趣.
我在TCP Client中收到了一个byte []数组.该数组包含一个24位RGB位图文件.如何创建具有给定宽度,高度和数据的位图文件?
在C++中我使用它
int WriteBitmapFile(const char *filename, int width, int height, unsigned char *imageData)
{
FILE *filePtr; // file pointer
BITMAPFILEHEADER bitmapFileHeader; // bitmap file header
BITMAPINFOHEADER bitmapInfoHeader; // bitmap info header
DWORD imageIdx; // used for swapping RGB->BGR
unsigned char tempRGB; // used for swapping
// open file for writing binary mode
filePtr = fopen(filename, "wb");
if (!filePtr)
return 0;
// define the bitmap file header
bitmapFileHeader.bfSize = sizeof(BITMAPFILEHEADER);
bitmapFileHeader.bfType = 0x4D42;
bitmapFileHeader.bfReserved1 = 0;
bitmapFileHeader.bfReserved2 = 0; …Run Code Online (Sandbox Code Playgroud) 我必须在C#中开发一个从Oracle DB中检索一些数据的工具.由于我们的IT支持在安装Oracle客户端时遇到了一些问题,我希望能够在没有安装客户端的情况下连接到数据库.我们的想法是与应用程序一起安装(并可能注册)一个额外的库.
Oracle客户端存在哪些替代方案,它们的优缺点是什么?
这适用于一个小型应用程序(1个表单,2个或3个查询,结果显示在DataGrid中,可能不超过10-20个数据集),但我也对可伸缩性问题感兴趣,因为我们也可能会远离Oracle客户拥有更大的未来项目.
当然,免费软件解决方案会很好,但我们不仅限于此.
我有一个带按钮的面板.我的按钮是动态创建的.我希望有4行,每行4个按钮.但我只得到一排.
foreach (CategoriesDataSet.CategoriesRow category in DataRepository.Categories.Categories)
{
if (!category.CategoryName.Equals("ROOT"))
{
SimpleButton button = new SimpleButton();
button.Text = category.CategoryName;
button.Tag = category.CategoryId;
button.Size = new Size(82, 70);
if (lastButton != null)
button.Left = lastButton.Right + 1;
lastButton = button;
button.Click += CategoryButtonClick;
categoriesPanel.Controls.Add(button);
}
}
Run Code Online (Sandbox Code Playgroud)
期望的结果:
x x x x
X x x x
x x x x
Run Code Online (Sandbox Code Playgroud) 我想在Windows XP下安装Ext2分区的驱动程序,安装将使用自编写的Inno Setup脚本完成.我需要为此调用哪些API函数?从我到目前为止googled我似乎不需要一个inf文件,因此没有调用SetupCopyOEMInf.但我不知道该怎么办......
请赐教!