2014-12-08 3 views
1

У меня есть программа установки NSIS для приложения, которое может выполняться как обычный пользователь. Но если пользователь хочет установить в каталог «Program Files», его все равно можно выполнить, запустив установщик с правами администратора.NSIS uninstaller привилегии в соответствии с установщиком

Теперь у меня возникла проблема, что деинсталлятор запускается с привилегиями пользователя по умолчанию, даже если установка выполнялась как администратор. Это приводит к тому, что деинсталляция отключается. Еще хуже: он даже заявляет, что процесс удаления был успешным, не удаляя любые файлы.

Мой вопрос: возможно ли создать деинсталлятор во время установки, который требует (или лучше: запрашивает себя) тех же привилегий, что и процесс установки?

ответ

3

Вам придется выполнить эту проверку самостоятельно. Вы можете check if you are admin в инсталлятор с плагином UserInfo, а затем сохранить результат в .ini, реестр или append инфо-к uninstaller.exe:

InstallDir $temp\instdir 

Section 

UserInfo::GetAccountType 
Pop $0 
StrCmp $0 "Admin" 0 +2 
StrCpy $0 1 
IntOp $0 $0 & 1 ; $0 is now 1 if admin or 0 if not 

SetOutPath $InstDir 
WriteUninstaller "$InstDir\Uninstall.exe" 
FileOpen $1 "$InstDir\Uninstall.exe" a 
FileSeek $1 0 END 
FileWriteByte $1 $0 
FileClose $1 

SectionEnd 


Section Uninstall 

FileOpen $1 "$ExePath" r 
FileSeek $1 -1 END 
FileReadByte $1 $0 
FileClose $1 
DetailPrint "Installer was admin: $0" 

SectionEnd 
+0

Спасибо за очень полезное предложение о хранении информации в uninstaller, так как я в настоящее время не записываю записи реестра. Любые идеи, если это возможно (или, может быть, нет?), Если деинсталлятор может условно выполнить команду «RequestExecutionLevel admin», если установщик был запущен в режиме администратора? – wls

+2

Вы можете использовать «RequestExecutionLevel наивысший», но не условно ... – Anders