Vb6 如何让应用程序自动向支持人员发送日志文件?

Vb6 如何让应用程序自动向支持人员发送日志文件?,vb6,windows-xp,logging,error-logging,Vb6,Windows Xp,Logging,Error Logging,为了管理来自特定客户端的错误,我正在考虑让应用程序在启动时向我发送当前的错误日志文件 在VB6/XP环境中实现这一点的最佳方法是什么 电子邮件可能很容易,但我想这可能会触发各种防病毒/防火墙保护 连接到Web服务器可能更好。在这种情况下,应用程序还需要打开Windows防火墙吗?我正在使用XMLHTTP上传客户端错误日志,如下所示: 我认为,从他们的电脑到你的电脑的任何连接都会触发Windows防火墙。唯一可能不会触发Windows防火墙响应的是,如果您尝试在端口80上执行HTTP请求,但即使这

为了管理来自特定客户端的错误,我正在考虑让应用程序在启动时向我发送当前的错误日志文件

在VB6/XP环境中实现这一点的最佳方法是什么

电子邮件可能很容易,但我想这可能会触发各种防病毒/防火墙保护

连接到Web服务器可能更好。在这种情况下,应用程序还需要打开Windows防火墙吗?

我正在使用XMLHTTP上传客户端错误日志,如下所示:


我认为,从他们的电脑到你的电脑的任何连接都会触发Windows防火墙。唯一可能不会触发Windows防火墙响应的是,如果您尝试在端口80上执行HTTP请求,但即使这样,它也可能触发Windows防火墙。防火墙应该确保你的应用程序不能做任何奇怪的事情。例如,如果它允许您在没有警告用户的情况下执行HTTP请求,那么恶意程序可能会使用HTTP GET请求下载坏文件,从而伤害用户的计算机。因此,您所做的任何事情都可能触发Windows防火墙。@moowiz2020:您是否需要在Windows防火墙中为您的应用程序和所需的端口添加一个异常?基本上是的。因此,我认为发送电子邮件或HTTP帖子会很容易。一旦您尝试发送电子邮件或HTTP请求,将弹出一个Windows防火墙窗口,询问用户是否希望您的应用程序访问internet。请注意,我还没有真正测试过这些,所以可能会有问题。即使通过端口80发送HTTP,也可能会被公司防火墙阻止,因为它们有时会通过另一个端口路由HTTP。您最好的选择是使用本地机器邮件客户端发送您的电子邮件-但您不能保证这将能够以静默方式进行。@MattWilko:如果您使用本地邮件客户端,您可以抑制邮件/确认,并且可以防止电子邮件出现在已发送邮件中吗?听起来好像使用哪个HTTP代理有问题。您是说存在部署问题。除了Microsoft.XMLHTTP、WinHttp.WinHttpRequest.5.1和WinInet之外,您会推荐哪一种?XMLHTTP经常被损坏,但WinHttpRequest在较旧的操作系统上不可用。我现在使用XMLHTTP,因为它更兼容。在浏览器中,如果没有Ajax,用户可以站得很长。@ WQW考虑添加一些示例代码以避免只链接一个答案。
Private Sub pvPostFile(sUrl As String, sFileName As String, Optional ByVal bAsync As Boolean)
    Const STR_BOUNDARY  As String = "3fbd04f5-b1ed-4060-99b9-fca7ff59c113"
    Dim nFile           As Integer
    Dim baBuffer()      As Byte
    Dim sPostData       As String

    '--- read file
    nFile = FreeFile
    Open sFileName For Binary Access Read As nFile
    If LOF(nFile) > 0 Then
        ReDim baBuffer(0 To LOF(nFile) - 1) As Byte
        Get nFile, , baBuffer
        sPostData = StrConv(baBuffer, vbUnicode)
    End If
    Close nFile
    '--- prepare body
    sPostData = "--" & STR_BOUNDARY & vbCrLf & _
        "Content-Disposition: form-data; name=""uploadfile""; filename=""" & Mid$(sFileName, InStrRev(sFileName, "\") + 1) & """" & vbCrLf & _
        "Content-Type: application/octet-stream" & vbCrLf & vbCrLf & _
        sPostData & vbCrLf & _
        "--" & STR_BOUNDARY & "--"
    '--- post
    With CreateObject("Microsoft.XMLHTTP")
        .Open "POST", sUrl, bAsync
        .SetRequestHeader "Content-Type", "multipart/form-data; boundary=" & STR_BOUNDARY
        .Send pvToByteArray(sPostData)
    End With
End Sub

Private Function pvToByteArray(sText As String) As Byte()
    pvToByteArray = StrConv(sText, vbFromUnicode)
End Function