Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

Shutdown and Logoff System Events and Windows Services

adrianojorgeadrianojorge Posts: 1Member
Good Morning to all :)

Currently i'm developing a Windows Service in order to automatically send me e-mails with my remote computer operating status.
I already checked MSDN documentation about this subject http://msdn.microsoft.com/en-us/library/ycy63t34.aspx and changed the code to use on my situation. But... i don't receive e-mails from it when the remote computer is normally turned off.

Someone could help me with this issue?

The code i'm using is:
[code] using System;
using System.ServiceProcess;
using System.Threading;
using System.Windows.Forms;
using System.Diagnostics;
using Microsoft.Win32;
using System.ComponentModel;
using System.Configuration.Install;
using System.Net.Mail;

namespace SimpleServiceCs
{
public class SimpleService : ServiceBase
{
static void Main(string[] args)
{
ServiceBase.Run(new SimpleService());
}

protected override void OnStart(string[] args)
{
EventLog.WriteEntry("SimpleService", "Starting SimpleService");
new Thread(RunMessagePump).Start();
}

void RunMessagePump()
{
EventLog.WriteEntry("SimpleService.MessagePump", "Starting SimpleService Message Pump");
Application.Run(new HiddenForm());
}

protected override void OnStop()
{
Application.Exit();
}
}

public partial class HiddenForm : Form
{
public HiddenForm()
{
InitializeComponent();
}

private void HiddenForm_Load(object sender, EventArgs e)
{
SystemEvents.SessionEnding += new SessionEndingEventHandler(SystemEvents_SessionEnding);
}

private void HiddenForm_FormClosing(object sender, FormClosingEventArgs e)
{
SystemEvents.SessionEnding -= new SessionEndingEventHandler(SystemEvents_SessionEnding);
}
//****************************************************************************
// THIS IS THE PART OF CODE STRANGELY NOT WORKING!?!?
//****************************************************************************

private void SystemEvents_SessionEnding(object sender, EventArgs e)
{
EventLog.WriteEntry("System Logoff or System Shutdown");
SendEMail("Your System is being Logged Off or Shutdown!");
}

//****************************************************************************

private void SendEmail(string Warning){

//Here goes all the code necessary for sending e-mails from my personal mail account

}


}

partial class HiddenForm
{
private System.ComponentModel.IContainer components = null;

protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

private void InitializeComponent()
{
this.SuspendLayout();
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(0, 0);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Name = "HiddenForm";
this.Text = "HiddenForm";
this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
this.Load += new System.EventHandler(this.HiddenForm_Load);
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.HiddenForm_FormClosing);
this.ResumeLayout(false);

}
}

[RunInstaller(true)]
public class SimpleInstaller : Installer
{
private ServiceInstaller serviceInstaller;
private ServiceProcessInstaller processInstaller;

public SimpleInstaller()
{
processInstaller = new ServiceProcessInstaller();
serviceInstaller = new ServiceInstaller();

// Service will run under system account
processInstaller.Account = ServiceAccount.LocalSystem;

// Service will have Start Type of Manual
serviceInstaller.StartType = ServiceStartMode.Automatic;

serviceInstaller.ServiceName = "Simple Service";

Installers.Add(serviceInstaller);
Installers.Add(processInstaller);
}
}
}

[/code]

Best Regards.
Sign In or Register to comment.