扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
您可以创建日志文件,并使其包含与互操作性、程序加载和网络有关的诊断信息。通过设置注册表项,可以启用日志记录。首先,设置一个注册表项以启用常规日志记录,然后针对所需的日志记录组件和选项来设置注册表项。
10年积累的成都做网站、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站后付款的网站建设流程,更有博山免费网站建设让你可以放心的选择与我们合作。
可以使用下列方法设置注册表项:
使用 Visual Studio 中的远程注册表编辑器。
在 .NET Compact Framework 2.0 Service Pack 1 中,使用远程性能监视器中的日志记录选项。有关远程性能监视器的更多信息,请参见 如何:在运行时监视性能。
在 .NET Compact Framework 3.5 中,可以使用日志记录工具 NetCFLogging.exe,该工具提供了用于启用和禁用日志记录的简单的图形用户界面。此工具包括在 Power Toys for .NET Compact Framework 中。有关更多信息,请参见 Power Toys for .NET Compact Framework。
使用 Registry 和 RegistryKey 类,.NET Compact Framework 2.0 版及更高版本支持这些类。
下表对这些日志文件进行了总结。
日志记录组件
日志文件内容
互操作
记录 COM 互操作调用。提供有关平台调用和封送处理的信息。
错误
记录所有未处理的异常和本机异常。将错误记录到日志文件和 OutputDebugString 中。将为位于当前路径的每个程序集创建日志文件,并将其应用于当前会话。在第一次出现未处理的异常或本机异常之后,将覆盖日志文件。
加载程序
记录有关程序加载的信息。文件标头包含下列信息:
应用程序名称。
进程 ID(由 Windows Embedded CE 提供)。
创建日志文件的本地日期和时间。其格式不是全局性的,而是区域性特定的。
.NET Compact Framework 版本,例如 2.0.5021.00。
与平台相关的信息,例如 Windows Embedded CE v5.0.1400 (CEPC) WinCE5x86 debug Dev i386 IJITv2。
文件提供以下信息:
强制状态(兼容性模式)。
加载模块时为模块指定的信任级别。
解析方法时失败。
解析类型时失败。
查找或加载程序集或模块时失败。
程序集加载成功。
无效的元数据版本。
查找平台调用 DLL 时失败。
在平台调用 DLL 中查找函数时失败。
策略文件的名称,或者指出缺少该文件的事实。
策略文件处理过程中的主要错误。
托管程序集基于策略的重定向。
此外,还可以包括有关全局程序集缓存的信息。
网络
记录网络流量。网络日志文件是二进制文件,如果没有 .NET Compact Framework 日志查看器 Logviewer.exe,则无法访问该文件。在 .NET Compact Framework 3.5 及更高版本中,该日志查看器包含在 Power Toys for .NET Compact Framework 中。有关更多信息,请参见 Power Toys for .NET Compact Framework。
由于网络日志记录发生在 Windows 套接字层,因此日志文件只包含网络数据包信息。这包括通过网络发送的数据,其中有些可能是敏感数据,因而需要进行加密。
终结器
记录在垃圾回收器丢弃对象之前未释放这些对象的类名。.NET Compact Framework 3.5 及更高版本支持此日志。
对象名不包含在日志中,原因是这些名称对于公共语言运行时 (CLR) 不可用。但是,未释放的对象的类名有助于识别这些对象。未释放的对象在应用程序中可能造成性能问题。
说明:
某些情况下,调用终结器的是 .NET Compact Framework 而不是应用程序代码。
此文件包含以下信息:
指示终结器何时对对象运行垃圾回收器的时间戳。
被终结对象的类。
跟踪
记录 Windows Communication Foundation (WCF) 的代码异常。桌面 .NET Framework 支持三种日志记录:跟踪、消息处理和事件日志记录。.NET Compact Framework 上的 WCF 只支持通过跟踪日志记录来跟踪代码异常,但它不记录警告和错误消息。
.NET Compact Framework 3.5 及更高版本支持此日志。
默认情况下,系统会将日志文件写入包含被诊断的应用程序的目录。但是,您可以使用注册表项指定路径和其他选项,如下所示:
使用其他路径写入日志文件。这需要安全注册表的访问权限。
在日志文件名中包含应用程序名称。
在日志文件名中包含进程 ID。
日志文件名由以下几部分组成,其中组件 可以是“互操作”、“错误”、“加载程序”或“网络”、“终结器”或“跟踪”:
netcf_应用程序名称_组件_进程 ID.log
应用程序名称和进程 ID 为可选项,它们基于注册表设置。
例如,对于名为 MyApp.exe 的应用程序,其加载程序日志文件可命名如下:
netcf_MyApp_Loader_2066923010.log
有关如何检查互操作日志文件和加载程序日志文件等日志文件的信息,请参见 日志文件信息。
启用日志记录
将以下 Enabled 项的值设置为 1:
HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Enabled
必须设置此项值才能启用六种日志记录:互操作、加载程序、错误、网络、终结器和跟踪。请注意,默认情况下,Logging 下的子项并不存在。
可以通过将此值设置为 0(零)来关闭所有日志记录。
指定日志文件路径(可选)
将以下 Path 项的值设置为表示日志文件位置的字符串:
HKLM\Security\.NETCompactFramework\Diagnostics\Logging\Path
此项只能通过可写入安全注册表的应用程序来访问。如果未指定路径,系统会将日志文件写入包含应用程序的目录。
在名称中包含应用程序(可选)
将以下 UseApp 项的值设置为 1:
HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\UseApp
如果要运行多个应用程序并为每个应用程序获取单独的日志文件,则可以使用此项。如果有两个应用程序将日志文件写入同一目录,则当第二个应用程序运行时,较早的日志文件始终会被较新的日志文件覆盖。UseApp 项可以用作日志文件的区分符。
在名称中包含进程 ID(可选)
将以下 UsePid 项的值设置为 1:
HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\UsePid
如果要多次运行同一个应用程序并为每个实例创建单独的日志,则可以使用此项。此设置会在日志文件名中添加进程 ID,以使应用程序的每个实例都能用不同的名称创建新日志文件。
在事件发生时记录事件(可选)
将以下 Flush 项的值设置为 1:
HKLM\Software\Microsoft\.NETCompactFramework\Diagnostics\Logging\Flush
设置此值后,公共语言运行时 (CLR) 便会在事件发生时立即将日志事件写入日志文件,而不是先将事件保存在缓冲区中,并在写满缓冲区时才写入日志文件。此设置会给应用程序的性能带来负面影响,并可能稍稍修改应用程序的计时。但是,它有助于诊断与应用程序故障或其他错误有关的问题,因为您可能需要查看导致错误的最后几个事件。如果不存在或未设置此项,则系统将只有在写满缓冲区后,才会向日志文件写入数据。
举个例子:
先引入命名空间:
Imports
System.IOImports
System.Security.AccessControl
代码:
Dim
sec
As
DirectorySecurity
=
New
DirectorySecurityDim
rule
As
FileSystemAccessRule
=
New
FileSystemAccessRule("Administrator",
FileSystemRights.Delete,
AccessControlType.Allow)sec.AddAccessRule(rule)Directory.CreateDirectory("C:\test",
sec)
这段代码就是以
Administrator
帐户
在
C:\
创建
test
文件夹。
很多种方法,最常用的一是用文本文件或数据库记录,二是调用API函数直接写入系统日志或应用程序日志
'很简单,添加一个过程 MyLog
'在 Form_Load 中加入 Call MyLog("启动")
'在 Form_Unload 中加入 Call MyLog("退出")
Private Sub Form_Load()
Call MyLog("启动")
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call MyLog("退出")
End Sub
Private Sub MyLog(nStr As String)
Dim F As String, H As Long
nStr = Format(Now, "yyyy-mm-dd hh:mm:ss") nStr
F = "C:\myprog.log"
'如果要将文件保存到与你的 exe 相同的文件夹,将上句改为 F = App.Path "\myprog.log"
H = FreeFile
Open F For Append As #H
Print #H, nStr
Close #H
End Sub
本示例阐释二进制文件的基本输入和输出(使用 BinaryReader、BinaryWriter 和 FileStream 类。 在如何创建日志文件标题下面有一个类似的主题。读写二进制信息使您可以创建和使用通过其他输入和输出方法无法访问的文件。本示例还展示写入非字符串数据,并展示二进制 I/O 的功能。
尽管计算机上的文件可以不同的类型和文件存储,但是,二进制格式是文件的较常用格式之一。此处对创建二进制文件的简短介绍使用基类 BinaryReader 和 BinaryWriter 从文件获取信息,并将信息放入文件。这些类中的每个类均封装一个信息流,因此,在进一步操作之前,需要创建一个可用于来回写信息的流。因为要创建文件,所以可使用 FileStream 来公开特定文件,在此情况下,如果该文件已存在,则可以修改该文件,或者如果该文件尚不存在,则可以创建该文件。在有 FileStream 之后,可以使用它来构造 BinaryReader 和 BinaryWriter
在读入信息之后,可以对信息进行所需的任何操作。但是,在某些时候,您可能想要将信息写回文件,因此需要 BinaryWriter。在本示例中,您将使用 Seek 方法将信息追加到文件结尾,因此,在开始写入之前,请确保指向文件的指针位于文件结尾。在使用 BinaryWriter 写入信息时有多个选项。因为 Write 方法有足够的重载用于您能够写入的所有信息类型,所以,可以使用 Write 方法向您的编写器封装的流写入任何标准形式的信息。本情况下,还可以使用 WriteString 方法向流中写入长度预先固定的字符串。
VB Source: VB\ReadWrite.aspx
%@ Import Namespace="System.Text" %
%@ Import Namespace="System.IO" %
script language="VB" runat=server
Class TestBinary
Public Shared Function ReadFile(selection As String) As String
Dim output As StringBuilder = New StringBuilder()
Dim fs As FileStream = New FileStream("data.bin", FileMode.OpenOrCreate)
Dim r As BinaryReader = New BinaryReader(fs)
Try
r.BaseStream.Seek(0,SeekOrigin.Begin) ' 将文件指针设置到文件开始
' 因为不同数据类型之间的很多转换结果都是不可解释的,
' 所以当在其他类型与二进制数据之间进行转换时,
' 必须捕捉可能引发的任何潜在的异常...
' 能够正确读取数据依赖于如何写入信息...
' 这与写日志文件时不同。
Do While r.BaseStream.Position r.BaseStream.Length ' 当未到达文件结尾时
Select Case selection
Case "Boolean"
output.Append( r.ReadBoolean().ToString() )
Case "String"
output.Append( r.ReadString() )
Case "Integer"
output.Append( r.ReadInt32().ToString() )
End Select
Loop
Finally
fs.Close()
End Try
return output.ToString()
End Function
Public Shared Function WriteFile(output As Object, selection As String) As String
Dim fs As FileStream = New FileStream("data.bin", FileMode.Create)
Dim w As BinaryWriter = New BinaryWriter(fs)
Dim strOutput As String = ""
w.BaseStream.Seek(0, SeekOrigin.End) ' 将文件指针设置到文件结尾
' 因为正在写的信息可能不适合于所选择用于写入的特定样式
' (例如,单词“Hello”作为整数?),所以我们必须捕捉写入
' 错误,并通知用户未能执行该任务
Try
Select Case selection
Case "Boolean"
Dim b As Boolean = Convert.ToBoolean(output)
w.Write( b )
Case "String"
Dim s As String = Convert.ToString(output)
w.Write( s )
Case "Integer"
Dim i As Int32 = Convert.ToInt32(output)
w.Write(i)
End Select
Catch E As Exception
' 让用户知道未能写入该信息
strOutput = "写异常:" chr(13) _
"无法以所请求的格式写入要写入的信息。" _
chr(13) "请输入尝试写入的数据类型的有效值"
End Try
fs.Close()
return strOutput
End Function
End Class
Sub btnAction_Click(src As Object, E As EventArgs)
Dim s As String = ""
' 写出文件
s = TestBinary.WriteFile(txtInput.Text, lstDataIn.SelectedItem.Text)
If s = "" Then
Try
' 读回信息,显示信息...
txtOutput.Text = TestBinary.ReadFile(lstDataIn.SelectedItem.Text)
Catch Exc As Exception
' 让用户知道未能写入信息
s = "读异常:" chr(13) _
"无法以所请求的格式读取要写入的信息。" _
chr(13) "请输入尝试写入的数据类型的有效值"
End Try
Else
txtOutput.Text = s
End If
End Sub
/script
html
head
link rel="stylesheet" href="intro.css"
/head
body style="background-color:f6e4c6"
form method=post runat="server"
p
table
tr
tdb
下面的示例使用 BinaryWriter 对象创建一个二进制文件,然后使用 BinaryReader 读取该信息。/b可以选择不同的对象来将所需的信息写入文件
此演示用于强调您需要知道如何读取已写入的二进制文件。一旦以某种格式写入数据,就只能以该格式读取该信息。但是,可以将多种不同的数据类型写入文件。在此演示中,输入任意字符串并将它们作为字符串读取,对于整型,仅输入整型数值项(试试浮点数字,然后看看会发生什么...);对于布尔型项,仅输入词“false”和“true”。
p
hr
/td
/tr
/table
asp:Table id="basetable" runat="server" border="0" cellspacing="0" cellpadding="5"
asp:tablerow
asp:tablecell verticalalign="top"
请选择要保存到二进制文件的数据类型...
/asp:tablecell
asp:tablecell verticalalign="top"
asp:listbox id="lstDataIn" runat="server"
asp:listitemBoolean/asp:listitem
asp:listitem selected="true"String/asp:listitem
asp:listitemInteger/asp:listitem
/asp:listbox
/asp:tablecell
asp:tablecell verticalalign="top"
asp:button id="btnAction" onclick="btnAction_Click" Text="写入/读取文件" runat="server"/
/asp:tablecell
/asp:tablerow
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流