Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Windows service

Postades av 2005-02-17 08:35:32 - Erik Viklund, i forum vb.net, Tråden har 6 Kommentarer och lästs av 546 personer

Har skrivit min första windows service som skall skriva till en .txt fil vid ett visst tillfälle:
<code>
Dim LastRunDate = Date
Protected Overrides Sub OnStart(ByVal args() As String)
' Add code here to start your service. This method should set things
' in motion so your service can do its work.
EventLog1.WriteEntry("In OnStart")
If Now.DayOfWeek = DayOfWeek.Wednesday And Not (LastRunDate.Year = Now.Year And LastRunDate.Month = Now.Month And LastRunDate.Day = Now.Day) And TimeString = "16:00:00" Then
'Do Stuff

Dim path As String = "C:\Inetpub\wwwroot\mulle.txt"
If File.Exists(path) = False Then
' Create a file to write to.
Dim sw As StreamWriter = File.CreateText(path)
sw.WriteLine("Hello")
sw.WriteLine("And")
sw.WriteLine("Welcome")
sw.Flush()
sw.Close()
EventLog1.WriteEntry("Skapade textfil")
End If

LastRunDate = Now
End If
End Sub
</code>

Porblemet är att den inte skriver till filen kl 16:00. Har provat att dimma ut IF satsen för tid/datum, och då skapas filen och skrivs till. Har det något med att med systemtiden att göra?


Svara

Sv: Windows service

Postades av 2005-02-17 09:26:36 - Mikael Johansson

Jag är lite osäker där, men VB klarar väl inte real-time utan arbetar vid förfrågan. Lös det med javascript eller liknande som kallar på funktionen.


Svara

Sv: Windows service

Postades av 2005-02-17 09:35:48 - Marcus Gus

Antar att OnStart är startmetoden på servicen som körs när servicen startar.

<code>If Now.DayOfWeek = DayOfWeek.Wednesday And Not (LastRunDate.Year = Now.Year And LastRunDate.Month = Now.Month And LastRunDate.Day = Now.Day) And TimeString = "16:00:00" Then</code>
Om man kollar på satsen ovan så får man logiken:
dagen datum skall vara onsdag, LastRunDate får inte vara dagens datum(det löser du smidigare med dateDiffmetoden btw) OCH TimeString måste vara "16:00:00".

Så frågan är var du tilldelar TimeString och LastRunDate värden? Om det inte är så att du tilldelar TimeString värdet "16:00:00" direkt i deklarationen så kommer ju aldrig IF-satsen at bli sann.

Flödet blir ju
1. Tjänsten försöker starta och kör OnStartmetoden
2. Kontrollerar IF-satsen där LastRunDate inte får vara dagens datum samt att TimeString MÅSTE vara "16:00:00"
3. Tjänsten har startats och gör? Ja vadå, enligt exemplet ovan ingenting...

Jag tror helt enkelt att du inte har rätt värden på LastRunDate och Timestring när du försöker köra. Du skriver även "Porblemet är att den inte skriver till filen kl 16:00." men i det du har angett så finns ingen som helst logik för att skriva till något vid klockslaget 16:00:00, utan metoden du har körs enbart när servicen startas.

Så mitt förslag är:
1. använd EventLog1.WriteEntry() för att skriva ut värdena du får på LastRunDate och TimeString och se om de blir tok. De MÅSTE vara dagens datum OCH "16:00:00" NÄR servicen startar för att logiken som du har skall fungera.
2. Tänk på att OnStart körs ENDAST när servicen startar och inte vid vissa klockslag vilket gör att du inte kan förvänta dig att den skriver något klockan 16:00:00 (om du inte startar servicen exakt då).
3. Tänk över vad du vill uppnå och hur du vill genomföra det. Skriv gärna här vad du vill göra så kan du få tips...


Förslag:
Vill du ha en service som skriver till en logg vid ett klockslag så gör en service med Onstartmetod. Lägg till en Timer till din service med intervall på några sekunder (minuter eller hur stor noggranhet du nu vill ha) och i Din OnStart metod så kör du enbart timerns Start funktion. Sedan kontrollerar du datum och tid i timerns Tick funktion.


Svara

Sv:Windows service

Postades av 2005-02-17 09:58:07 - Marcus Gus


<code>

Dim LastRun As DateTime = Now.AddDays(-1)
Dim NextRun As DateTime = datum + tiden 16:00:00

Protected Overrides Sub OnStart(ByVal args() As String)
EventLog1.WriteEntry("Service Started")

Timer1.Interval = 5000
Timer1.Start()
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If Now.DayOfWeek = DayOfWeek.Wednesday And DateDiff("d", Now, LastRun) <> 0 And DateDiff(DateInterval.Minute, TimeOfDay, nextrun) > 0 Then
'Skriv....


LastRun = Now()
End If
End Sub
End Class
</code>

Var 5'e sekund kommer Timer1_Tick att köras och kontrollera tiden. Det här är inget exempel som går att köra utan enbart ett exempel på hur man skulle kunna göra. För ökad prestand så kolla även på AndAlso


Svara

Sv: Windows service

Postades av 2005-02-17 15:47:48 - Erik Viklund

Tack för svaret. Timer i servicen var allt jag behövde. Däremot finns bara Timer_Tick som event i windows projekt, när man gör service projekt heter det Timer_Elapsed. Angående min IF sats för datum kollen så funkar:

<code>
If Now.DayOfWeek = DayOfWeek.Wednesday And Not (LastRunDate.Year = Now.Year And LastRunDate.Month = Now.Month And LastRunDate.Day = Now.Day) And TimeString = "16:00:00" Then
</code>

eftersom TimeString returnerar den aktuella tiden. Man skulle även kunna byta ut det till now.hour = 16 and now.minute = 00

Nu blir nästa steg att hämta data från X antal databaser och skriva till fil.


Svara

Sv:Windows service

Postades av 2005-02-18 08:44:52 - Marcus Gus

Hej

Visst funkar din IF-sats men det vore smidigare om du lärde dig DateDiff-metoden som finns just för att jämföra datum (om inte annat blir koden mycket mer lättläst och överskådlig). Kolla oxå upp skillnaden mellan AND och ANDALSO så ser du att ANDALSO skulle göra en del för prestanda, speciellt i en service som kanske loopar ofta.


Svara

Sv:Windows service

Postades av 2005-02-18 10:05:02 - Johan Svensson

Hej,

Frågan är väl inte om din TimeString fungerar om den körs vid rätt tidpunkt. Men som din kod är skriven så måste denna loop genomlöpas minst två gånger per sekund för att garantera att du intemissar detta villkoret. Låt oss t.ex. säga att du kolla 15:59:59 då körs inte din kod, likaväl så körs den inte om nästa mätning ärr två sekunder senare, dvs 16:00:01. Så prestanda mässigt har du ett program som ligger och lastar ner datorn genom att genomlöpa en loop minst två gånger per sekund, det är just sådana saker som iallafall jag inte vill ha på min dator.

Sedan kan man ju fundera på vad som händer om du skall köra detta på en annan dator med andra inställningar, t.ex. på kulturen. Låt oss säga att du kör i London då blir klockan förmodligen aldrig "16:00:00" utan snarare "4:00:00 pm"...

Jag skulle rekommendera att du utnyttjar windows möjligheter till notification. Du kan sätta upp ett program att prenumerera på olika händelser i windows, däribland tidshändelser. Så du kan få windows att sätta igång ditt program vid en viss tidpunkt. Kör man klassisk VB 6 så löste man detta med diverse API funktioner, hur man gör i .Net vet jag inte ännu men jag utgår från att det finns motsvarande funktioner i .Net plattformen, om inte så får man väl använda API funktionerna fortfarande.


Lycka till!

// Johan


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 722
27 958
271 751
1 156
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies