Это проблема, в Vista / Win7, похоже, нет API для получения токена непривилегированного пользователя, который вам необходим для вызова CreateProcessAsUser (). Единственные решения, которые я нашел, включают использование планировщика задач для запуска программы. Это не кажется мне очень практичным.
Простое решение, которое приходит на ум, - это использовать небольшой вспомогательный процесс без повышенных прав. Он, в свою очередь, может запустить процесс установки с повышенными правами и ждать подтверждения от этого, чтобы запустить режим без повышенных прав. Рукопожатие достаточно простое, чтобы сделать это с именованным мьютексом.