2016-06-14 57 views
0

我有一個NSIS腳本(從嚮導生成的)執行卸載這樣的:SIS卸載程序沒有從控制面板進入

!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條目仍然存在。 有什麼問題?

在此先感謝

+0

DeleteRegKey指令位於卸載程序部分?請發佈完整的示例腳本來重現問題,並請告訴我們您正在使用的Windows版本。 – Anders

+0

是的,DeleteRegKey在Section 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,看看是否卸載程序無法刪除卸載關鍵...

相關問題