2015-10-13 3 views
1

У меня есть НСИ пакет, который состоит из 3 пунктов: 1. .Net 4.0 настройки 2. C++ redistr 3. My AppКак использовать RequestExecutionLevel внутри IF THEN блок

Мой инсталлятор всегда молчит. В этом пакете я проверяю установленную версию .Net и C++ и устанавливаю из своего пакета, если у меня больше, но если у пользователя есть правильная версия net и C++, мой пакет просто экспортирует мое приложение в папку temp и запускает его.

Для установки .net или C++ у пользователя должны быть настройки администратора, но для запуска моего приложения он не нужен. Я, не хочу всегда просить администратора rigths с RequestExecutionLevel администратора

Можно как некоторые реализации такой логики в пакете:

IF (user_has_net != true || user_has_c++ != true) { 
    RequestExecutionLevel admin 
} else { 
    RequestExecutionLevel user 
} 

ответ

2

Свойство RequestExecutionLevel устанавливается для вашей установки во время компиляции и встраивается в манифесте установщиков. Он не может быть установлен во время выполнения.

Лучшим обходным решением, которое я могу придумать в вашем случае, является включение другого установщика, который обрабатывает библиотеки времени выполнения C++ и .Net. Затем этот установщик может иметь RequestExecutionLevel, установленный в admin, и при необходимости его извлекать и выполнять вашим основным установщиком.

Что-то вроде этого должно работать.

IF (user_has_net != true || user_has_c++ != true) { 
    SetOutPath "$TEMP" 
    File "OtherInstaller.exe" 
    ExecWait "$TEMP\OtherInstaller.exe" 
} 
+0

Вы правы, так просто и элегантно. спасибо –

Смежные вопросы