Из MSDN Process.Start вернет:
Новый компонент процесса, который
связанный с ресурсом процесса,
или нулевая ссылка
(Ничего в Visual Basic), если нет
ресурс процесса запущен (для
Например, если существующий процесс
повторно).
В вашем случае, поскольку вы передаете URL-адрес Process.Start, а не исполняемому файлу, вы фактически не запускаете новый процесс. Вы передаете URL iexplore, или каков ваш браузер. И поэтому вы получаете ноль обратно.
В любом случае, что будет означать «блокирование выполнения программы до тех пор, пока пользователь не завершит запущенный процесс»? Подождите, пока пользователь закроет веб-браузер? В этом случае вы можете захотеть что-то вроде:
Process p = Process.Start("iexplore", "http://www.google.com");
p.WaitForExit();
... что мне подходит. Тем не менее, требуется указать исполняемый файл браузера.