You will get more control over the new process you are creating if you use CreateProcess() instead of ShellExecuteEx() and running Update.exe in the background.
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
PROCESS_INFORMATION pi;
STARTUPINFO si;
BOOL ret = FALSE;
DWORD flags = CREATE_NO_WINDOW;
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.dwFlags |= STARTF_USESTDHANDLES;
si.hStdInput = NULL;
si.hStdError = h;
si.hStdOutput = h;
CString cmd = _T("cmd /c ") + _T("Update.exe");
BOOL inherits = FALSE;
ret = CreateProcess(NULL,
cmd.GetBuffer(),
NULL,
NULL,
inherits,
flags,
NULL,
NULL,
&si,
&pi);
DWORD dwExitCode = 0;
if (ret)
{
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return TRUE;
}