WinDaemon is a Windows Daemon tool for automatically restarting an application after it crashes. The latest version is 0.35.

WinDaemon's Main Features Include:

WinDaemon: Windows Installer (Size 1.16MB). Only download if you agree to our License Agreement.

If you have previously installed via the Installer and want to update to the latest version, click the 'Check for updates' menu button or download this
Zip File (Size 177KB) and extract the files into your WinDaemon directory, overwriting the files already there.


WinDaemon is a Windows Daemon version of the Linux daemon tool that restarts a program after a crash. If a monitored process crashes or is stopped, WinDaemon spawns another instance of that process. You can optionally pass the process parameters and/or send keystrokes. So, for example, if you want to load a file when a process restarts you can send it the keystrokes necessary to do this.

WinDaemon is an unlimited unrestricted shareware program. However, if you find the program useful please show you appreciation by buying a copy of Web Excavator.


How To Use:

WinDaemon is controlled by a configuration file named daemon.ini. The commands available for use in this file are listed below:
  Command    Description 
 START_PAUSED  WinDaemon will not spawn any process until the user presses the 'Unpause' button.
 PROCESSX  The path and filename of the file to monitor (e.g. PROCESS1="c:\windows\notepad.exe")
 PROCESS_DELAYX  The delay in milliseconds before the process is spawned (e.g. for one second delay, PROCESS_DELAY1=1000)
 MACROX  The keystrokes to send to the process after it's been launched (e.g. MACRO1=Hello {HOME})
 MACRO_DELAYX  The delay in milliseconds before the macro for a process is run (e.g. for two second delay, MACRO_DELAY1=2000)
 MACRO_REPEATX  The delay in milliseconds before the macro for a process is rpeated
 (e.g. to repeat the macro for process 2 every 8 seconds, MACRO_REPEAT2=8000)
 PARAMSX  The parameters to pass when launching a process (e.g. PARAMS2="test.txt")
 TITLEX  The title in the launched process window (should not be needed, but some processes will not return a process id)
 (e.g. TITLE1=daemon.ini - Notepad)
 FREEDISKSPACE_URL  Call this web page if the free disk space goes below the value defined by FREEDISKSPACE_MINIMUM and passes it a drive variable set to the drive that is having problems.
 FREEDISKSPACE_MINIMUM  When below this amount (in MB) call the FREEDISKSPACE_URL defined above.
 ;  A ';' (Semi-colon) comments out the line, i.e. the line is ignored.

WinDaemon can be used to monitor multiple applications. The X in the table above refers to which application we are referring to. So for the first process use 1, for the second 2, etc.

Keystroke Macros:

Each key is represented by one or more characters. To specify a single keyboard character, use the character itself. For example, to represent the letter A, set MACRO1=A in the daemon.ini file. To represent more than one character, append each additional character to the one preceding it. To represent the letters A, B, and C, specify the parameter as MACRO1=ABC

The plus sign (+), caret (^), percent sign (%), tilde (~), and parentheses () have special meanings. To specify one of these characters, enclose it within braces ({}). For example, to specify the plus sign, use "{+}". To specify brace characters, use "{{}" and "{}}". Square Brackets ([ ]) have no special meaning, but you must enclose them in braces. In other applications, brackets do have a special meaning that might be significant when dynamic data exchange (DDE) occurs.

To specify characters that aren't displayed when you press a key, such as ENTER or TAB, and keys that represent actions rather than characters, use the codes in the following table.

  Key     Code  
 PRINT SCREEN  {PRTSC} (reserved for future use) 
 F1  {F1}
 F2  {F2}
 F3  {F3}
 F4  {F4}
 F5  {F5}
 F6  {F6}
 F7  {F7}
 F8  {F8}
 F9  {F9}
 F10  {F10}
 F11  {F11}
 F12  {F12}
 F13  {F13}
 F14  {F14}
 F15  {F15}
 F16  {F16}
 Keypad add  {ADD}
 Keypad subtract  {SUBTRACT}
 Keypad multiply  {MULTIPLY}
 Keypad divide  {DIVIDE}

To specify keys combined with any combination of the SHIFT, CTRL, and ALT keys, precede the key code with one or more of the following codes.

Key         Code        

To specify that any combination of SHIFT, CTRL, and ALT should be held down while several other keys are pressed, enclose the code for those keys in parentheses. For example, to specify to hold down SHIFT while E and C are pressed, use "+(EC)". To specify to hold down SHIFT while E is pressed, followed by C without SHIFT, use "+EC".

To specify repeating keys, use the form {key number}. You must put a space between key and number. For example, {LEFT 42} means press the LEFT ARROW key 42 times; {h 10} means press H 10 times.

The following are additions have been added by Elias (aka lallous) whose code is used in this application:

 Key  Code
 +  {PLUS}
 @  {AT}
 ^  {CARET}
 ~  {TILDE}
 Left/Right WINKEY  {LWIN} {RWIN}
 WINKEY  {WIN} equivalent to {LWIN} 

In addition to this, Elias (aka lallous) and Josh Nimoy has added some special commands:

 Command Syntax   Action
 {VKEY X}   Sends the Virtual Key Code of value X.

 For example, {VKEY 13} is equivalent to VK_RETURN.

 {BEEP X Y}}   Beeps with a frequency of X and a duration of Y milliseconds.
 {DELAY X}   Delays sending the next key for X milliseconds. After the delay, the subsequent keys will not be further delayed unless there is a default delay value (see DELAY=X below).

 Example: {DELAY 1000}  -- delays any subsequent key strokes for 1 second.

 {DELAY=X}   Sets the default delay value to X milliseconds. This will cause every key to be delayed X ms.

 {DELAY X) Overrides this value.

 Example: {DELAY=1000}  -- all subsequent keys will be delayed for 1 second.


 Moves the mouse cursor to the given location. e.g. {MOUSE 50 150}


 Simulates a right mouse button down click


 Simulates a right mouse button up event


 Simulates a left mouse button down click


 Simulates a left mouse button up event

 {APPACTIVATE WindowTitle}   Activates an application using its WindowTitle.

 Very useful if you want to send different keys to different active applications.

For more information about the SendKeys 'language' please go here.

To report a bug with WinDaemon or to request a new feature please
click here.

Page last updated: 6th October 2007.