RegisterApplicationRestart Function

Registers the active instance of an application for restart.

Syntax

C++
HRESULT WINAPI RegisterApplicationRestart(
  __in_opt  PCWSTR pwzCommandline,
  __in      DWORD dwFlags
);

Parameters

pwzCommandline [in, optional]

A pointer to a Unicode string that specifies the command-line arguments for the application when it is restarted. The maximum size of the command line that you can specify is RESTART_MAX_CMD_LINE characters. Do not include the name of the executable in the command line; this function adds it for you.

If this parameter is NULL or an empty string, the previously registered command line is removed. If the argument contains spaces, use quotes around the argument.

dwFlags [in]

This parameter can be 0 or one or more of the following values.

ValueMeaning
RESTART_NO_CRASH
1

Do not restart the process if it terminates due to an unhandled exception.

RESTART_NO_HANG
2

Do not restart the process if it terminates due to the application not responding.

RESTART_NO_PATCH
4

Do not restart the process if it terminates due to the installation of an update.

RESTART_NO_REBOOT
8

Do not restart the process if the computer is restarted as the result of an update.

 

Return Value

This function returns S_OK on success or one of the following error codes.

Return codeDescription
E_FAIL

Internal error.

E_INVALIDARG

The specified command line is too long.

 

Remarks

Your initial registration for restart must occur before the application encounters an unhandled exception or becomes unresponsive. You could then call this function from inside your recovery callback to update the command line.

For a Windows application that is being updated, the last opportunity to call this function is while processing the WM_QUERYENDSESSION message. For a console application that is being updated, the registration must occur before the installer tries to shutdown the application (you need to keep the registration current; you cannot call this function when handling the CTRL_C_EVENT notification).

If you register for restart and the application encounters an unhandled exception or is not responsive, the user is offered the opportunity to restart the application; the application is not automatically restarted without the user's consent. However, if the application is being updated and requires a restart, the application is restarted automatically.

To prevent cyclical restarts, the system will only restart the application if it has been running for a minimum of 60 seconds.

Note that for an application to be restarted when the update requires a computer restart, the installer must call the ExitWindowsEx function with the EWX_RESTARTAPPS flag set or the InitiateShutdown function with the SHUTDOWN_RESTARTAPPS flag set.

Requirements

Minimum supported clientWindows Vista
Minimum supported serverWindows Server 2008
HeaderWinbase.h (include Windows.h)
LibraryKernel32.lib
DLLKernel32.dll

See Also

UnregisterApplicationRestart

Send comments about this topic to Microsoft

Build date: 11/12/2009

Tags :


Community Content

Daniel McGloin
Question about: "...only restart the application if ... running for a minimum of 60 seconds."
I don't think this statement is true. If an application checks for updates at startup and patches itself, this process can take less than 60 seconds. Empiracally, this 60 second minimum does not appear to apply in this scenario.
Tags :

Vlad VIssoultchev
Different environment variables after restart by a crash
Origin of the problem

If your process is restarted due to a crash then the parent process will be winlogon.exe which has a different environment than the usual parent process explorer.exe. In particular variables CommonProgramFiles and CommonProgramFiles(x86) are not registered in the winlogon environment and your process copy of environment will not get these.

Affected components

Expect paths like %CommonProgramFiles%\System\Ado\msado15.dll to fail resolution. Expect ADO/OLEDB stack, together with a fairly large number of system COM components to fail with bizarre automation errors or similar.

Resolution or workarounds

I'm putting additional checks on my process environment, then using SetEnvironmentVariable along with SHGetFolderPath to remedy the situation.

cheers,
</wqw>

Page view tracker