Killing a process when user invokes shutdown or log off - Urgent

Posted on 2006-10-20
Medium Priority
Last Modified: 2010-04-24

I have an app that is running upon startup.  When the user shuts down the system or logs off, i get the "End Now" message to kill the process.  

Is there any registry entry that I can add upon install of the app so that when the user logs off or shuts down, it kills the process?

Thanks Experts

Question by:posae
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
  • 2

Expert Comment

ID: 17774265
How about installing the application as a Windows Service?

Author Comment

ID: 17774291
It is a little trickier than that as the program requires username/password that the user enters upon startup at log-on time.

Expert Comment

ID: 17774303
Sorry, slightly short and sweet reply there :)

Is your application a Windows Forms application or a Console application?  Converting it to a service isn't that much of a chore really and would probably be better in the long run.

That way, when the computer starts up, your application will startup in the background and, when it shuts down, Windows will terminate it automatically, with no fuss.

That's assuming you have the ability to create a windows service with your version of Visual Studio ;)
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.


Expert Comment

ID: 17774315
Ah, sorry, posted my 2nd comment before seeing your addition there
LVL 21

Accepted Solution

mastoo earned 2000 total points
ID: 17775308
Look at help on the SessionEnding event.  There's an example of how to trap this, and then you could just have your app close.

Expert Comment

ID: 17786998
Just had a look into Mastoo's solution and he is a god :)  I didn't realise that the functionality existed in .NET but, now I do I plan to make full use of it myself.

Here's an example on MSDN on the use of the SessionEnding event.  Please though, if you do use this, give Mastoo the accepted solution.  I just googled SessionEnding, which isn't an answer from me at all :) Mastoo came up with the idea and deserves the credit



Author Comment

ID: 17788163
Thanks for your help guys...I have been a little busy up until now but I will get to it ASAP and then go from there.  I appreciate your time.

Author Comment

ID: 17882516
For some reason, the program is not trapping the shutdown.  Here is my code

Imports Microsoft.Win32
Public Class dsTokProcessorInfo
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

    Public Sub New()

        'This call is required by the Windows Form Designer.

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
            End If
        End If
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
    Friend WithEvents NotifyIcon1 As System.Windows.Forms.NotifyIcon
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.components = New System.ComponentModel.Container
        Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(dsTokProcessorInfo))
        Me.NotifyIcon1 = New System.Windows.Forms.NotifyIcon(Me.components)
        Me.NotifyIcon1.Icon = CType(resources.GetObject("NotifyIcon1.Icon"), System.Drawing.Icon)
        Me.NotifyIcon1.Text = "docusyst Processor"
        Me.NotifyIcon1.Visible = True
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(292, 173)
        Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
        Me.Name = "dsTokProcessorInfo"
        Me.Text = "dsTokProcessorInfo"
        Me.TopMost = True
        Me.WindowState = System.Windows.Forms.FormWindowState.Minimized

    End Sub

#End Region

    Private Sub dsTokProcessorInfo_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        AddHandler SystemEvents.SessionEnding, AddressOf OnShuttingdown
        AddHandler SystemEvents.SessionEnded, AddressOf OnShutdown

        Dim endsessionHandler As SessionEndedEventHandler
        AddHandler SystemEvents.SessionEnded, endsessionHandler


    End Sub

    Public Shared Sub OnShuttingdown(ByVal sender As Object, ByVal e As SessionEndingEventArgs)
            msgbox("Shutting Down")      
    End Sub

    Public Shared Sub OnShutdown(ByVal sender As Object, ByVal e As SessionEndedEventArgs)
            msgbox("Shut Down")
    End Sub
LVL 21

Expert Comment

ID: 17883284
Let me change my answer slightly.  I thought I'd used that but I'd forgotten it was awkward to work with because the event isn't guaranteed to be before the closing event and it comes in on a different thread.  The easier way is something like this:

  Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)

    Const WM_QUERYENDSESSION As Integer = &H11
      Me.m_bSystemShutdownInProgress = True
    End If
  End Sub

and then in your form's closing event you can test m_bSystemShutdownInProgress to see if you should really shut down.  Which now that I look at hairyminga's link, I see it is explained there also.

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Article by: jpaulino
XML Literals are a great way to handle XML files and the community doesn’t use it as much as it should.  An XML Literal is like a String (http://msdn.microsoft.com/en-us/library/system.string.aspx) Literal, only instead of starting and ending with w…
Creating an analog clock UserControl seems fairly straight forward.  It is, after all, essentially just a circle with several lines in it!  Two common approaches for rendering an analog clock typically involve either manually calculating points with…
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…
In this video, Percona Solutions Engineer Barrett Chambers discusses some of the basic syntax differences between MySQL and MongoDB. To learn more check out our webinar on MongoDB administration for MySQL DBA: https://www.percona.com/resources/we…
Suggested Courses

649 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