C# logparserdl的程序集问题(我使用';tblimp';命令将其转换为Interop.MSUtil)
我希望使用LogParser.DLL程序集,所以我在普通控制台应用程序上测试它,它工作了,然后我把它放到服务器上,发送到Win2003进行测试(我没有更多的空间来安装数据库之类的服务)。。。 它总是在eventViewer日志中返回FileNotFoundException错误 我尝试使用堆栈跟踪来查看实际发生的情况,我发现DLL根本不导入,在谷歌搜索之后,我在这个网站上找到了答案,它告诉我使用.Net命令提示符,然后使用导入汇编命令,如果我写的话,它是tblimp“file name”/out“new file” 我制作了我的程序集,它是.NET4,所以我去了我以前的VS,并做了同样的工作来提供一个.NET2.0.x兼容的DLL,我使用它,它工作了,但是 出现新的错误: 错误消息:检索具有CLSID的组件的COM类工厂 {8CFEBA94-3FC2-45CA-B9A5-9EDACF704F66}由于以下原因失败 错误:80040154。StackTrace:在 FileEventReaderService.EventReader.ReadEventsDatabase(字符串 开始日期,字符串结束日期) 所以我再次开始搜索我的错误消息,发现了一些我无法单独处理的事情 例如,我看到有人对你说,你需要注册DLL手册或使用dllregisterservice,或是把应用程序只编译为86X cpu类型,但我不想这样做。。。因为我不是为已知硬件和软件的单个用户写的 现在有人能帮忙吗?在安装应用程序时使用dll注册或任何其他可能有助于解决此问题的方法?“Interop.MSUtil.dll”库的名称C# logparserdl的程序集问题(我使用';tblimp';命令将其转换为Interop.MSUtil),c#,.net,dll,.net-assembly,logparser,C#,.net,Dll,.net Assembly,Logparser,我希望使用LogParser.DLL程序集,所以我在普通控制台应用程序上测试它,它工作了,然后我把它放到服务器上,发送到Win2003进行测试(我没有更多的空间来安装数据库之类的服务)。。。 它总是在eventViewer日志中返回FileNotFoundException错误 我尝试使用堆栈跟踪来查看实际发生的情况,我发现DLL根本不导入,在谷歌搜索之后,我在这个网站上找到了答案,它告诉我使用.Net命令提示符,然后使用导入汇编命令,如果我写的话,它是tblimp“file name”/out
请帮助我,这对我来说非常重要,但在这之后的几个月里,我仍然需要太多的时间来检查逻辑错误,而不是编译错误:|我正要编写一个服务、应用程序,我做了一些,我爱上了我们讨论过的错误和评论 这是一段时间过去了,所以我不能告诉你发生的每一件事,但我会给你的答案,让我走出这个
首先,我需要处理dll和我自己的应用程序,而不是其他应用程序,并且不运行例如带有隐藏命令的日志解析器,并通过Diagnostig.Process将查询作为参数 所以我拿dll dll在我为测试提供的win应用程序中单独工作,在O/S vs中,它可能是出于证书原因。。 但它在我的其他服务器操作系统中不起作用。。。 同样在服务应用程序中,它会出现一个日志,告诉我我有一个IO:FileNotFoundException,因此我放入try-catch块,然后打印堆栈跟踪,异常告诉我一旦程序集丢失。。。所以我开始搜索并发现我应该以某种方式导入dll,所以步骤1:
- 看看你需要什么样的dll,我指的是.net版本,例如,我需要基于.net 2.x的dll,以便在较旧的操作系统中获得更多支持,但VS 2010给了我一个基于.net 4.x的dll,所以我在程序文件中引用了Visual studio 2005
- 从开始菜单的所有程序菜单打开visual studio文件夹,转到“visual studio工具”文件夹,最后运行“visual studio命令提示符”
- 接下来,将logparser.dll文件放在可访问的位置,如c:\temp\
- 运行以下命令:
tlbimp“c:\temp\logparser.dll”/out:“c:\temp\Interop.MSUtil.dll”
- 请注意,“Interop.MSUtil.dll”是应用程序要查找的程序集名称,但是您不能直接将logparser.dll重命名为它
- 将其放入项目中,并将所有引用从logparser.dll切换到Interop.MSUtil.dll(这是因为名称空间不同)
ILogRecordset rs = null;
try
{
((DebugLogger) _logProviderDebugMode).Log("T1-2", "Debug-EventReaderClass",
EventLogEntryType.Information);
LogQueryClass qry = new LogQueryClass();
COMEventLogInputContextClass eventLogFormat = new COMEventLogInputContextClassClass();
((DebugLogger) _logProviderDebugMode).Log("T1-3", "Debug-EventReaderClass",
EventLogEntryType.Information);
string query = "select * from security WHERE TimeGenerated >= '" + startDate +
"' and TimeGenerated <'" + endDate +
"' and (eventid=560 or eventid=540)";
rs = qry.Execute(query, eventLogFormat);
((DebugLogger) _logProviderDebugMode).Log("T1-4", "Debug-EventReaderClass",
EventLogEntryType.Information);
for (; !rs.atEnd(); rs.moveNext())
{
//Processes
}
}
catch(Exception ex)
{
((DebugLogger)_logProviderDebugMode).Log(
"T1-5\nError Msg: " + ex.Message + "\nStackTrace: " + ex.StackTrace
, "Debug-EventReaderClass",
EventLogEntryType.Error);
}
finally
{
((DebugLogger)_logProviderDebugMode).Log("T1-6", "Debug-EventReaderClass",
EventLogEntryType.Information);
if (rs != null)
rs.close();
}
LogQueryClass qry = new LogQueryClass();
COMEventLogInputContextClass eventLogFormat = new COMEventLogInputContextClassClass();