Solved

Message Box in Windows Service

Posted on 2010-08-16
11
1,455 Views
Last Modified: 2013-11-26
I have recently picked up programming again after a few years of not really doing any. I was previously used to VB 6 coding, but have now made the jump to VB.net 2010.

I have never created a Windows Service before so am trying to create a service that interacts with the desktop in a way that will allow me to show a message box.

For my first windows service sample/test app I wanted to create a service with 1 timer that runs for 5 seconds and on the elapsed event to show a message box of the current time.

Whatever I try, whether I use a windows forms timer control or a system.timer or ticking interactive on the service propertys box, nothing seems to work and because the message box isn't showing im uncertain what the service is doing or if the timer is even working.

So the question is, how do I create a simple windows service that throws a message box up onto the screen showing the current time at each 5 or 10 second loop?
0
Comment
Question by:Terry Rogers
  • 4
  • 3
  • 3
  • +1
11 Comments
 
LVL 18

Expert Comment

by:John (Yiannis) Toutountzoglou
Comment Utility
try this
Button ->btnStartStop
Label -> Min
Label ->Sec
Private Sub btnStartStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStartStop.Click

        If btnStartStop.Text = "Start" Then

            CountDownTime = Now.AddMinutes(1/12)            

            Dim ts As TimeSpan = CountDownTime.Subtract(Now)

            Min.Text = ts.Minutes.ToString

            Sec.Text = ts.Seconds.ToString

            Timer1.Start()

            btnStartStop.Text = "Stop"

        Else

            Timer1.Stop()

            btnStartStop.Text = "Start"

        End If

    End Sub



    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        If CountDownTime < Now Then

            Timer1.Stop()

            MessageBox.Show("out of time.")

            btnStartStop.Text = "Start"

        Else



            Dim ts As TimeSpan = CountDownTime.Subtract(Now)

            Min.Text = ts.Minutes.ToString

            Sec.Text = ts.Seconds.ToString



        End If

    End Sub

Open in new window

0
 
LVL 1

Author Comment

by:Terry Rogers
Comment Utility
This is a Windows Service so I don't have any forms to put a button or label onto.
0
 
LVL 18

Expert Comment

by:John (Yiannis) Toutountzoglou
Comment Utility
yeap you are right!!!Trying!!
0
 
LVL 18

Assisted Solution

by:John (Yiannis) Toutountzoglou
John (Yiannis) Toutountzoglou earned 166 total points
Comment Utility
0
 
LVL 47

Expert Comment

by:Wayne Taylor (webtubbs)
Comment Utility
To show a MessageBox from a Service, you need to use the "ServiceNotification" option....

    System.Windows.Forms.MessageBox.Show("Your Message", _
                                                                         "Caption", _
                                                                         System.Windows.Forms.MessageBoxButtons.OK, _
                                                                         System.Windows.Forms.MessageBoxIcon.Information, _
                                                                         System.Windows.Forms.MessageBoxDefaultButton.Button1, _
                                                                         System.Windows.Forms.MessageBoxOptions.ServiceNotification)

Wayne
0
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 1

Author Comment

by:Terry Rogers
Comment Utility
Hmmm, getting closer, I can now see the timer event does first as I was able to put some code that logged a message each time it fired, however it still wont display a message box.

My code as it stands is attached.
Imports System.Windows.Forms

Imports System.Threading



Public Class WillNet

    Private oTimer As System.Threading.Timer

    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.

        Dim oCallback As New TimerCallback(AddressOf OnTimedEvent)

        oTimer = New System.Threading.Timer(oCallback, Nothing, 0, 5000)



    End Sub



    Protected Overrides Sub OnStop()

        ' Add code here to perform any tear-down necessary to stop your service.

    End Sub



    Private Sub OnTimedEvent(ByVal state As Object)

        MessageBox.Show(Now, Me.ServiceName, MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification)

    End Sub



End Class

Open in new window

0
 
LVL 47

Expert Comment

by:Wayne Taylor (webtubbs)
Comment Utility
Add a NotifyIcon and show a message from there. This is the most common method for showing messages from a service.
0
 
LVL 1

Author Comment

by:Terry Rogers
Comment Utility
Just tried that with no success, even though I have ticked "Allow service to interact with desktop" it just doesn't want to show anything on screen.
0
 
LVL 47

Accepted Solution

by:
Wayne Taylor (webtubbs) earned 167 total points
Comment Utility
0
 
LVL 1

Author Comment

by:Terry Rogers
Comment Utility
A notification area isn't going to work as their wont be a notification area if a user hasn't logged on.
0
 
LVL 10

Assisted Solution

by:joriszwaenepoel
joriszwaenepoel earned 167 total points
Comment Utility
If you create a Windows Service, then one of consequences is that you can't interact with the logged on user, so you can't show a messagebox.
If you can find a trick that would allow you to do that, you will still run into problems.
If no one is logged on, should the servcie continue or wait until someone logs on?
If the service continues, and show a new messagebx, and then another one, and then another one ...

You should try to find another design.
For example: the Windows Service could write messages in a file or database.
Then when a user log on, start a WinForms app that reads the file or database and shows the messages to the user.
0

Featured Post

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

In my previous article (http://www.experts-exchange.com/Programming/Languages/.NET/.NET_Framework_3.x/A_4362-Serialization-in-NET-1.html) we saw the basics of serialization and how types/objects can be serialized to Binary format. In this blog we wi…
More often than not, we developers are confronted with a need: a need to make some kind of magic happen via code. Whether it is for a client, for the boss, or for our own personal projects, the need must be satisfied. Most of the time, the Framework…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…
You have products, that come in variants and want to set different prices for them? Watch this micro tutorial that describes how to configure prices for Magento super attributes. Assigning simple products to configurable: We assigned simple products…

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

6 Experts available now in Live!

Get 1:1 Help Now