2011-09-19 111 views
-1

已經寫了一個windows服務。而代碼適用於一個簡單的表單應用程序,它不在Windows服務中工作。這裏的代碼問題.net窗口服務

Imports System.Text.RegularExpressions 
Imports System.Net.Sockets 
Imports System.Net 
Imports System.IO 

Public Class Service1 

Public Shared Function CheckProxy(ByVal Proxy As String) As Boolean 
    Dim myWebRequest As HttpWebRequest = CType(WebRequest.Create("http://google.com"), HttpWebRequest) 
    myWebRequest.Proxy = New WebProxy(Proxy, False) 
    myWebRequest.Timeout = 10000 
    Try 
     Dim myWebResponse As HttpWebResponse = CType(myWebRequest.GetResponse(), HttpWebResponse) 
     Dim loResponseStream As StreamReader = New StreamReader(myWebResponse.GetResponseStream()) 
     Return True 
    Catch ex As WebException 
     If (ex.Status = WebExceptionStatus.ConnectFailure) Then 

     End If 
     Return False 
    End Try 
End Function 


Protected Overrides Sub OnStart(ByVal args() As String) 
    System.IO.File.AppendAllText("C:\AuthorLog.txt", 
     "AuthorLogService has been started at " & Now.ToString()) 
    MsgBox("1") 
    Timer1.Enabled = True 
End Sub 

Protected Overrides Sub OnStop() 
    ' Add code here to perform any tear-down necessary to stop your service. 
    Timer1.Enabled = False 
End Sub 

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 
    MsgBox("2") 
    ' Check if the the Event Log Exists 
    If Not Diagnostics.EventLog.SourceExists("Evoain Proxy Bot") Then 
     Diagnostics.EventLog.CreateEventSource("MyService", "Myservice Log") ' Create Log 
    End If 
    ' Write to the Log 
    Diagnostics.EventLog.WriteEntry("MyService Log", "This is log on " & _ 
    CStr(TimeOfDay), EventLogEntryType.Information) 

    Dim ProxyURLList As New Chilkat.CkString 
    Dim ProxyListPath As New Chilkat.CkString 
    Dim WorkingProxiesFileData As New Chilkat.CkString 
    Dim ProxyArray(10000000) As String 
    Dim event1 As New Chilkat.CkString 
    event1.setString("started") 
    event1.saveToFile("B:\serv.txt", "utf-8") 
    Dim ns As Integer = 0 
    'Read Configuration File 
    Dim sFileName As String 
    Dim srFileReader As System.IO.StreamReader 
    Dim sInputLine As String 
    sFileName = "config.ini" 
    srFileReader = System.IO.File.OpenText(sFileName) 
    sInputLine = srFileReader.ReadLine() 
    Dim temp As New Chilkat.CkString 
    Do Until sInputLine Is Nothing 
     temp.setString(sInputLine) 
     If temp.containsSubstring("proxyurllist=") = True Then 
      'Read Proxy-URL-List 
      ProxyURLList.setString(sInputLine) 
      If ProxyURLList.containsSubstring("proxyurllist=") = True Then 
       ProxyURLList.replaceFirstOccurance("proxyurllist=", "") 
      End If 
     ElseIf temp.containsSubstring("finalproxylistpath=") = True Then 
      'Read Proxy-List-Path 
      ProxyListPath.setString(sInputLine) 
      If ProxyListPath.containsSubstring("finalproxylistpath=") = True Then 
       ProxyListPath.replaceFirstOccurance("finalproxylistpath=", "") 

      End If 
     End If 
     sInputLine = srFileReader.ReadLine() 
    Loop 
    '*********Scrape URLs From Proxy-URL-List********************* 
    Dim ProxyURLFileData As New Chilkat.CkString 
    ProxyURLFileData.loadFile(ProxyURLList.getString, "utf-8") 


    Dim MultiLineString As String = ProxyURLFileData.getString 

    Dim ProxyURLArray() As String = MultiLineString.Split(Environment.NewLine.ToCharArray, System.StringSplitOptions.RemoveEmptyEntries) 
    Dim i As Integer 
    For i = 0 To ProxyURLArray.Count - 1 

     '********Scrape Proxies From Proxy URLs*********************** 
     Dim http As New Chilkat.Http() 
     Dim success As Boolean 
     ' Any string unlocks the component for the 1st 30-days. 
     success = http.UnlockComponent("Anything for 30-day trial") 
     If (success <> True) Then 
      Exit Sub 
     End If 
     ' Send the HTTP GET and return the content in a string. 
     Dim html As String 
     html = http.QuickGetStr(ProxyURLArray(i)) 
     Dim links As MatchCollection 
     links = Regex.Matches(html, "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}:[0-9]{1,5}") 
     For Each match As Match In links 
      Dim matchUrl As String = match.Groups(0).Value 
      ProxyArray(ns) = matchUrl 
      ns = ns + 1 
     Next 
    Next 
    '*************CHECK URLs***************** 
    Dim cnt As Integer = 0 
    For cnt = 0 To 1 

     Dim ProxyStatus As Boolean = CheckProxy("http://" + ProxyArray(cnt) + "/") 

     If ProxyStatus = True Then 
      WorkingProxiesFileData.append(Environment.NewLine) 
      WorkingProxiesFileData.append(ProxyArray(cnt)) 
     End If 
    Next 
    WorkingProxiesFileData.saveToFile(ProxyListPath.getString, "utf-8") 
End Sub 
End Class 

什麼是我不能在Windows服務中做的基本事情?哦,我也用chilkat庫.. 爲什麼我不能在OnStart中使用我所有的代碼?我這樣做了,服務就這樣開始了。 我可以使用別的東西,除了一個計時器,並把無盡的循環?

+0

這是行不通的? –

+0

什麼都沒有發生。它應該是寫入文件,彈出msgboxes,但沒有發生。 –

+1

看看控制面板,管理工具,事件查看器,Windows日誌,應用程序。這應該顯示該服務的任何重大故障。我可能是錯的,但我認爲使用任何類型的GUI服務是一個壞主意,沒有采取特殊步驟來允許它。您需要採取哪些步驟來安裝並啓動服務? –

回答

0

作爲Windows服務運行通常不會讓你看到任何彈出框等,因爲沒有用戶界面(除非你選中允許與桌面交互的方框)。

嘗試在OnStart方法中添加Timer1.Start。然後在你的Timer1_Tick方法中,首先停止計時器,然後開始備份,這樣,當你已經在工作時,你的Tick方法不會觸發。

0

我意識到我對這次派對非常遲到,但是您使用了什麼樣的計時器? A System.Windows.Forms.Timer專爲在單線程Windows窗體中使用而設計,不適用於Windows服務應用程序。改爲嘗試System.Timers.Timer