Solved

Restart a failed program

Posted on 2006-11-28
7
140 Views
Last Modified: 2010-04-30
I am running Mercury mail on my windows PC.
Occasionally it will stop running.
I need a script that I can schedule to run every 30 minutes that will:

1.  check the running processes for mercury.exe
2.  If mercury.exe is in the running processes, do nothing and go back to sleep
3.  If mercury.exe is not found in the running prcesses, restart mercury.exe (i.e. c:\mercury\mercury.exe)
4.  Rerun step 2
4.  Output actions to a log file

Any suggestions?
0
Comment
Question by:greetrufus
  • 2
  • 2
7 Comments
 
LVL 85

Accepted Solution

by:
Mike Tomlinson earned 500 total points
ID: 18028655
You can do something like...

Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")

' launch it...
Set oExec = WshShell.Exec("calc")

Dim targetTime
targetTime = DateAdd("n", 30, Now) ' 30 minutes from now

While True
    ' check every 5 seconds to see if our targetTime has been passed
    While targetTime > Now
        WScript.Sleep 5000 ' (max is 32,767 --> approx 30 seconds)
    Wend

    ' if it's closed...run it again
    If oExec.Status <> 0 Then
        Set oExec = WshShell.Exec("calc")
    End If

    ' set next "event" for 30 minutes out...
    targetTime = DateAdd("n", 30, Now) ' 30 minutes from now
Wend
0
 

Author Comment

by:greetrufus
ID: 18028858
Any way to output the results to a log file?
0
 
LVL 85

Expert Comment

by:Mike Tomlinson
ID: 18028986
Something like...

Const ForReading = 1, ForWriting = 2, ForAppending = 8

Dim fileName, fso, f, lines

fileName = "c:\someLog.txt"
Set fso = CreateObject("Scripting.FileSystemObject")

Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")

' launch it...
Set f = fso.OpenTextFile(fileName, ForAppending, True)
Set oExec = WshShell.Exec("calc")
f.Write(Now & " Application Started" & vbCrLf)  
f.Close

Dim targetTime
targetTime = DateAdd("n", 30, Now) ' 30 minutes from now

While True
    ' check every 5 seconds to see if our targetTime has been passed
    While targetTime > Now
        WScript.Sleep 5000 ' (max is 32,767 --> approx 30 seconds)
    Wend

    ' if it's closed...run it again
    Set f = fso.OpenTextFile(fileName, ForAppending, True)
    If oExec.Status <> 0 Then
        Set oExec = WshShell.Exec("calc")
        f.Write(Now & " Application Restarted" & vbCrLf)  
    Else
        f.Write(Now & " Application Still Alive" & vbCrLf)  
    End If
    f.Close

    ' set next "event" for 30 minutes out...
    targetTime = DateAdd("n", 30, Now) ' 30 minutes from now
Wend
 
0
 

Author Comment

by:greetrufus
ID: 18029228
How do I set the path to the executable?
it is c:\mercury\mercury.exe

Here is the code I am using that i get a path error on:
Const ForReading = 1, ForWriting = 2, ForAppending = 8

Dim fileName, fso, f, lines

fileName = "c:\Log.txt"
Set fso = CreateObject("Scripting.FileSystemObject")

Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")

' launch it...
Set f = fso.OpenTextFile(fileName, ForAppending, True)
Set oExec = WshShell.Exec("c:\mercury\mercury.exe")
f.Write(Now & " Application Started" & vbCrLf)  
f.Close

Dim targetTime
targetTime = DateAdd("n", 30, Now) ' 30 minutes from now

While True
    ' check every 5 seconds to see if our targetTime has been passed
    While targetTime > Now
        WScript.Sleep 5000 ' (max is 32,767 --> approx 30 seconds)
    Wend

    ' if it's closed...run it again
    Set f = fso.OpenTextFile(fileName, ForAppending, True)
    If oExec.Status <> 0 Then
        Set oExec = WshShell.Exec("c:\mercury\mercury.exe")
        f.Write(Now & " Application Restarted" & vbCrLf)  
    Else
        f.Write(Now & " Application Still Alive" & vbCrLf)  
    End If
    f.Close

    ' set next "event" for 30 minutes out...
    targetTime = DateAdd("n", 30, Now) ' 30 minutes from now
Wend
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Introduction While answering a recent question (http://www.experts-exchange.com/Q_27402310.html) in the VB classic zone, I wrote some VB code in the (Office) VBA environment, rather than fire up my older PC.  I didn't post completely correct code o…
Have you ever wanted to restrict the users input in a textbox to numbers, and while doing that make sure that they can't 'cheat' by pasting in non-numeric text? Of course you can do that with code you write yourself but it's tedious and error-prone …
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

919 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

12 Experts available now in Live!

Get 1:1 Help Now