Вообще. Приложение не должно «падать» ;)
Если вы хотите, чтобы программа запускалась еще и когда пользователь её пристрелит более изощрённым способом чем через диспетчер задач, то тут по-простому не получится (нужно делать службу, которая будет следить за приложением, а приложение должно следить за службой и перезапускать друг друга, но и это пользователь сможет победить, но уже существенно сложнее. И служба, если я не ошибаюсь, через ClickOnce не ставиться).
В противном случае отслеживайте событие завершения программы пользователем и перехватывайте все необработанные исключения (AppDomain.CurrentDomain.UnhandledException, Application.ThreadException для WinForms, например) и в этом случае перезапускайте приложение.