Solved

How to perform some transactions on system startup in C# .net(windows application)?

Posted on 2006-11-16
6
489 Views
Last Modified: 2008-01-09
Hi,

In my C# windows appllication , I want to perform some transactions on system startup
and atleast once in 24 hour when running for prolonged periods of time.
How to get  system startup time?
Or
Can I use Windows Services to set timers? how?  


Please help me.
0
Comment
Question by:vikasbapat
[X]
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
  • 2
6 Comments
 
LVL 29

Expert Comment

by:Gautham Janardhan
ID: 17955430
u could use the windows services project and do this

u could configure to auto run the service at start up and i think this would solve the problem :-)
0
 
LVL 29

Expert Comment

by:Gautham Janardhan
ID: 17955469
In .Net framework library the System.ServiceProcess namespace provides classes that allow you to implement, install, and control Windows service applications. To implement a service we need to inherit from ServiceBase class.
For installing a service, .Net provides a utility called installutil.exe which installs the service and registers it with Service Control Manager(SCM)




0
 
LVL 29

Accepted Solution

by:
Gautham Janardhan earned 500 total points
ID: 17955474
to install a service programatically

using System;
using System.Runtime.InteropServices;
 
namespace SvcInstaller
{
 /// <summary>
 /// Summary description for ServiceInstaller.
 /// </summary>
 class ServiceInstaller
 {
  #region Private Variables
 
  private string _servicePath;
  private string _serviceName;
  private string _serviceDisplayName;
 
  #endregion Private Variables
 
  #region DLLImport
 
  [DllImport("advapi32.dll")]
  public static extern IntPtr OpenSCManager(string lpMachineName,string lpSCDB, int scParameter);
  [DllImport("Advapi32.dll")]
  public static extern IntPtr CreateService(IntPtr SC_HANDLE,string lpSvcName,string lpDisplayName,
 int dwDesiredAccess,int dwServiceType,int dwStartType,int dwErrorControl,string lpPathName,
string lpLoadOrderGroup,int lpdwTagId,string lpDependencies,string lpServiceStartName,string lpPassword);
  [DllImport("advapi32.dll")]
  public static extern void CloseServiceHandle(IntPtr SCHANDLE);
  [DllImport("advapi32.dll")]
  public static extern int StartService(IntPtr SVHANDLE,int dwNumServiceArgs,string lpServiceArgVectors);
 
  [DllImport("advapi32.dll",SetLastError=true)]
  public static extern IntPtr OpenService(IntPtr SCHANDLE,string lpSvcName,int dwNumServiceArgs);
  [DllImport("advapi32.dll")]
  public static extern int DeleteService(IntPtr SVHANDLE);
 
  [DllImport("kernel32.dll")]
  public static extern int GetLastError();
 
  #endregion DLLImport
 
 
  /// <summary>
  /// The main entry point for the application.
  /// </summary>
  #region Main method + testing code
   [STAThread]
   static void Main(string[] args)
   {
     
     // TODO: Add code to start application here
     
   
    #region Testing
    //  Testing --------------
     string svcPath;
     string svcName;
     string svcDispName;
     
     //path to the service that you want to install
     svcPath = @"C:\build\service\Debug\Service.exe";
     svcDispName="Service Display Name";
     svcName= "Service Name";
 
     ServiceInstaller c = new ServiceInstaller();
     c.InstallService(svcPath, svcName, svcDispName);
 
     Console.Read();
       Testing --------------
    #endregion Testing
   }
  #endregion Main method + testing code - Commented
 

 
  /// <summary>
  /// This method installs and runs the service in the service conrol manager.
  /// </summary>
  /// <param name="svcPath">The complete path of the service.</param>
  /// <param name="svcName">Name of the service.</param>
  /// <param name="svcDispName">Display name of the service.</param>
  /// <returns>True if the process went thro successfully. False if there was any error.</returns>
  public bool InstallService(string svcPath, string svcName, string svcDispName)
  {
   #region Constants declaration.
   int SC_MANAGER_CREATE_SERVICE = 0x0002;
   int SERVICE_WIN32_OWN_PROCESS = 0x00000010;
   //int SERVICE_DEMAND_START = 0x00000003;
   int SERVICE_ERROR_NORMAL = 0x00000001;
 
   int STANDARD_RIGHTS_REQUIRED = 0xF0000;
   int SERVICE_QUERY_CONFIG       =    0x0001;
   int SERVICE_CHANGE_CONFIG       =   0x0002;
   int SERVICE_QUERY_STATUS           =  0x0004;
   int SERVICE_ENUMERATE_DEPENDENTS   = 0x0008;
   int SERVICE_START                  =0x0010;
   int SERVICE_STOP                   =0x0020;
   int SERVICE_PAUSE_CONTINUE         =0x0040;
   int SERVICE_INTERROGATE            =0x0080;
   int SERVICE_USER_DEFINED_CONTROL   =0x0100;
 
   int SERVICE_ALL_ACCESS             =  (STANDARD_RIGHTS_REQUIRED     |
        SERVICE_QUERY_CONFIG         |
        SERVICE_CHANGE_CONFIG        |
        SERVICE_QUERY_STATUS         |
        SERVICE_ENUMERATE_DEPENDENTS |
        SERVICE_START                |
        SERVICE_STOP                 |
        SERVICE_PAUSE_CONTINUE       |
        SERVICE_INTERROGATE          |
        SERVICE_USER_DEFINED_CONTROL);
   int SERVICE_AUTO_START = 0x00000002;
   #endregion Constants declaration.
 
   try
   {
    IntPtr  sc_handle = OpenSCManager(null,null,SC_MANAGER_CREATE_SERVICE);
 
    if (sc_handle.ToInt32() != 0)
    {
     IntPtr sv_handle = CreateService(sc_handle,svcName,svcDispName,SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,svcPath,null,0,null,null,null);
 
     if(sv_handle.ToInt32() ==0)
     {
 
      CloseServiceHandle(sc_handle);
      return false;
     }
     else
     {
      //now trying to start the service
      int i = StartService(sv_handle,0,null);
      // If the value i is zero, then there was an error starting the service.
      // note: error may arise if the service is already running or some other problem.
      if(i==0)
      {
       //Console.WriteLine("Couldnt start service");
       return false;
      }
      //Console.WriteLine("Success");
      CloseServiceHandle(sc_handle);
      return true;
     }
    }
    else
     //Console.WriteLine("SCM not opened successfully");
     return false;
 
   }
   catch(Exception e)
   {
    throw e;
   }
  }
 
 
  /// <summary>
  /// This method uninstalls the service from the service conrol manager.
  /// </summary>
  /// <param name="svcName">Name of the service to uninstall.</param>
  public bool UnInstallService(string svcName)
  {
   int GENERIC_WRITE = 0x40000000;
   IntPtr sc_hndl = OpenSCManager(null,null,GENERIC_WRITE);
 
   if(sc_hndl.ToInt32() !=0)
   {
    int DELETE = 0x10000;
    IntPtr svc_hndl = OpenService(sc_hndl,svcName,DELETE);
    //Console.WriteLine(svc_hndl.ToInt32());
    if(svc_hndl.ToInt32() !=0)
    {
     int i = DeleteService(svc_hndl);
     if (i != 0)
     {
      CloseServiceHandle(sc_hndl);
      return true;
     }
     else
     {
      CloseServiceHandle(sc_hndl);
      return false;
     }
    }
    else
     return false;
   }
   else
    return false;
  }
 }
}
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 15

Expert Comment

by:ozymandias
ID: 17955533
You just have some parameters in the applicatoin config file or in the registry,

DateTime AppStarted;
DateTime TransactionLastRun;
TimeSpan TransactionPeriod;

When the app starts it checks the TransactionLastRun and if the timespan between then and now is greater than the timspan TransactionPeriod thew run the transaction update the TransactionLastRun and the AppStarted.
Then start a timer that will check avery given period to see if 24 hours have elapsed since AppStarted and if they have run the transaction again.
0
 
LVL 15

Expert Comment

by:ozymandias
ID: 17955541
You do not need a windows service for this kind of thing. It's overkill.
0
 
LVL 29

Expert Comment

by:Gautham Janardhan
ID: 17955692
<system startup > not application start up
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

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

Suggested Solutions

Introduction Hi all and welcome to my first article on Experts Exchange. A while ago, someone asked me if i could do some tutorials on object oriented programming. I decided to do them on C#. Now you may ask me, why's that? Well, one of the re…
The article shows the basic steps of integrating an HTML theme template into an ASP.NET MVC project
In an interesting question (https://www.experts-exchange.com/questions/29008360/) here at Experts Exchange, a member asked how to split a single image into multiple images. The primary usage for this is to place many photographs on a flatbed scanner…
Exchange organizations may use the Journaling Agent of the Transport Service to archive messages going through Exchange. However, if the Transport Service is integrated with some email content management application (such as an antispam), the admini…

738 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