2016-06-14 4 views
0

У меня есть скрипт NSIS (сгенерированный с помощью мастера), который выполняет удаление, как это:сестренка деинсталлятор не удалить запись из панели управления

!define PRODUCT_DIR_REGKEY "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\MyProgram.exe" 
!define PRODUCT_UNINST_KEY "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" 
!define PRODUCT_UNINST_ROOT_KEY "HKLM" 
... 
Section -Post 
    WriteUninstaller "$INSTDIR\uninst.exe" 
    WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\MyProgram.exe" 
    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" 
    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" 
    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\MyProgram.exe" 
    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" 
    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" 
    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" 
SectionEnd 

... в конце сценария у меня есть:

DeleteRegKey HKLM "${PRODUCT_UNINST_KEY}" 
DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" 
SetAutoClose true 

Проблема заключается в том, что после запуска деинсталлятора запись MyProgram в панели Control Panel - Programs остается. Что случилось?

Заранее спасибо

+0

И инструкции DeleteRegKey находятся в разделе удаления? Пожалуйста, напишите полный пример сценария, который воспроизводит проблему, и, пожалуйста, сообщите нам версию Windows, которую вы используете. – Anders

+0

Да, DeleteRegKey находится в разделе Uninstall, перед строками DeleteRegKey есть только удаления файлов и каталогов. Я использую Windows 8.1, но проблема присутствует и в Win7 и Win10 –

+0

Такие вещи, как RequestExectionLevel, могут повлиять на вещи, поэтому это очень раздражает, когда вы не публикуете полный скрипт, который я могу скомпилировать! – Anders

ответ

0

прекрасно работает для меня на Windows 8:

!define PRODUCT_NAME "MyTest" 
!define PRODUCT_VERSION 1.0 
!define PRODUCT_WEB_SITE http://example.com 
!define PRODUCT_PUBLISHER ACME 
Name "MyTest" 
OutFile "Test.exe" 
RequestExecutionLevel admin 
InstallDir "$ProgramFiles\$(^Name)" 


Page Directory 
Page InstFiles 

!define PRODUCT_DIR_REGKEY "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\MyProgram.exe" 
!define PRODUCT_UNINST_KEY "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" 
!define PRODUCT_UNINST_ROOT_KEY "HKLM" 

Section 
SetOutPath $InstDir 
; File "MyProgram.exe" 
SectionEnd 

Section -Post 
    WriteUninstaller "$INSTDIR\uninst.exe" 
    WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\MyProgram.exe" 
    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" 
    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" 
    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\MyProgram.exe" 
    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" 
    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" 
    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" 
SectionEnd 

Section Uninstall 
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" 
DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" 
#SetAutoClose true 
SectionEnd 

Мое единственное предложение попробовать Process Monitor и посмотреть, если деинсталлятор не удается удалить ключ удаления ...

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