2016-06-14 5 views
0

I는 다음과 같이 제거 수행하는 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 항목이 남아 있다는 것입니다. 무엇이 잘못 되었나요? 윈도우 8에 나를 위해

+0

DeleteRegKey 지침은 제거 프로그램 섹션에 있습니까? 문제를 재현하는 전체 예제 스크립트를 게시하고 사용중인 Windows 버전을 알려주십시오. – Anders

+0

예, DeleteRegKey는 DeleteRegKey 행 앞에 파일 및 디렉토리 만 삭제되기 전에 섹션 제거에 있습니다. 나는 Windows 8.1을 사용하고 있지만 문제는 Win7 및 Win10에도 존재합니다. –

+0

RequestExectionLevel과 같은 것들이 영향을 미쳐서 실제로 컴파일 할 수있는 전체 스크립트를 게시하지 않을 때 매우 귀찮습니다! – Anders

답변

0

작품 잘 사전에

감사 :

내 유일한 제안 Process Monitor을 시도하고 제거 프로그램이 제거 키를 삭제하지 있는지 확인하는 것입니다
!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 

...