I wouldn't say elegant, but it worked when I last used it (which is quite a while ago now, though):
I have a batch file that can monitor for VoiceAttack's presence, and will attempt to restart it:
:watchdog
TIMEOUT /T 1
tasklist /v /FO CSV|find /i "werfault"|find /i "voiceattack"
IF NOT "%ERRORLEVEL%"=="1" (
taskkill /im WerFault.exe
)
tasklist|find /i "VoiceAttack"
IF "%ERRORLEVEL%"=="1" (
start "" "C:\Program Files (x86)\VoiceAttack\VoiceAttack.exe"
TIMEOUT /T 10
)
GOTO watchdog
This will just keep looping and check for VoiceAttack every second (you can increase the interval by changing the "/T 1" on the second line, E.G. "/T 5" to check every five seconds), and if it can't find the process, it will first attempt to close WerFault.exe (part of Windows error reporting, which may show up when VoiceAttack crashes), then to start VoiceAttack again.
If you want to prevent VoiceAttack from waiting at the "VoiceAttack Shutdown Issue" window when it's restarted, check the "Do not show this message again" box on that window (noting that you do this at your own risk, and that it will mean you need to manually press Ctrl-Shift should it ever be required, and will not see a notification when VoiceAttack does not close gracefully).
You can also check the "Start Minimized" option on the "General" tab of the VoiceAttack options window to prevent the main window from popping up on startup and stealing focus from the game, if you haven't already.