【问题标题】:How to have app automatically send log file to support?如何让应用程序自动发送日志文件到支持?
【发布时间】:2012-05-11 18:07:16
【问题描述】:

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

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

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

连接到网络服务器可能会更好。在这种情况下,应用程序是否仍需要打开 Windows 防火墙?

【问题讨论】:

  • 我认为,从他们的计算机到您的任何形式的连接都会触发 Windows 防火墙。唯一可能不会触发 Windows 防火墙响应的情况是,如果您尝试在端口 80 上执行 HTTP 请求,但即便如此,它也可能会触发 Windows 防火墙。防火墙应该确保您的应用程序不会做任何奇怪的事情。例如,如果它允许您在不警告用户的情况下执行 HTTP 请求,那么恶意程序可能会使用 HTTP GET 请求下载不良文件并损害用户的计算机。因此,您所做的任何事情都可能会触发 Windows 防火墙。
  • @moowiz2020:您是否只需在 Windows 防火墙中为您的应用程序和所需端口添加一个例外?
  • 基本上是的。因此,我认为发送电子邮件或 HTTP 帖子会很容易。一旦您尝试发送电子邮件或 HTTP 请求,就会弹出一个 Windows 防火墙窗口,询问用户是否要让您的应用程序访问 Internet。请注意,我还没有真正测试过这些,所以可能存在问题。
  • 即使通过端口 80 发送 HTTP 也可能被公司防火墙阻止,因为它们有时会通过另一个端口路由 HTTP。您最好的选择是使用本地计算机邮件客户端发送您的电子邮件 - 但您不能保证这将能够静默发生。
  • @MattWilko:如果你使用本地邮件客户端,你能抑制消息/确认,你能阻止电子邮件出现在已发送邮件中吗?

标签: vb6 windows-xp logging error-logging


【解决方案1】:

我正在使用XMLHTTP 上传客户端错误日志,如下所示:http://wqweto.wordpress.com/2011/07/12/vb6-using-wininet-to-post-binary-file/

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

【讨论】:

  • 听起来使用哪个 HTTP 代理存在问题。您是说存在部署问题。在 Microsoft.XMLHTTP、WinHttp.WinHttpRequest.5.1 和 WinInet 中,你会推荐哪一个?
  • XMLHTTP 经常损坏,但 WinHttpRequest 在旧操作系统上不可用。我现在使用XMLHTTP,因为它更兼容。如果浏览器中没有 AJAX,怀疑用户可以忍受很长时间。
  • @wqw 考虑添加一些示例代码以避免仅链接的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 2019-08-03
  • 2017-05-26
  • 1970-01-01
相关资源
最近更新 更多