2016-09-14 34 views
-2

Windowsフォームインストーラを作成するためにwinformアプリケーションにNSISを使用しました。私のテスタの1人が、NSISが複数のフォルダを作成するのを停止したという報告を最近Program Files (x86)に出しました。NSISインストーラから複数のアプリケーションをインストールできない

以前は複数の環境(Staging,Prep.,Production)で作業していましたが、環境ごとにインストーラを作成できましたが、最近はProgram Files (x86)のファイルが上書きされていると思います。ここで

はシナリオです:

私は、ステージングenvironment.Everything用のインストーラを作成するだけでなく、ファイルがProgram Files (x86)にインストールされます行くデスクトップアイコンが作成され、アプリケーションは、メニューを起動するために追加されます私は実行することですし、すべてが良く見える

NSISスクリプトをコンパイルしてインストーラをテストした後、インストール先フォルダがオーバーライドされず、ステージングのために同じパスが使用されています。インストーラでこれが起こっている。 Program Files (x86)に新しいフォルダが作成されていません。私はステージングフォルダを持っているだけです。 新しいデスクトップアイコンが作成されますが、私はプリプロダクションがステージングアプリケーションをアンインストール を実行しているステージングアプリケーションを実行していたときに、両方の私はNSIS script.Pleaseが持っている添付したものが起こっ

は、私にはわからない環境をアンインストールしますそれを見て、私が間違っていることを教えてください。

おかげで以下

についてNSISスクリプトです:

; Script generated by the HM NIS Edit Script Wizard. 

; HM NIS Edit Wizard helper defines 
!define PRODUCT_NAME "iContracts staging - Bulk Contract Uploader v 7.9" 
!define DIR_NAME "icontracts-UCO-BulkLoader-staging" 
!define PRODUCT_VERSION "" 
!define PRODUCT_PUBLISHER "iContracts" 
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\UCO\IcnBulkUpload.exe" 
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\UCO\${PRODUCT_NAME}" 
!define PRODUCT_UNINST_ROOT_KEY "HKLM" 

; MUI 1.67 compatible ------ 
!include "MUI.nsh" 

; MUI Settings 
!define MUI_ABORTWARNING 
!define MUI_ICON ".\Images\mine.ico" 
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" 

; Welcome page 
;!insertmacro MUI_PAGE_WELCOME 
; Directory page 
!insertmacro MUI_PAGE_DIRECTORY 
; Instfiles page 
!insertmacro MUI_PAGE_INSTFILES 
; Finish page 
!define MUI_FINISHPAGE_RUN "$INSTDIR\IcnBulkUpload.exe" 
!insertmacro MUI_PAGE_FINISH 

; Uninstaller pages 
!insertmacro MUI_UNPAGE_INSTFILES 

; Language files 
!insertmacro MUI_LANGUAGE "English" 

; MUI end ------ 

Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" 
OutFile "${PRODUCT_NAME}.exe" 
;InstallDir "$PROGRAMFILES\${PRODUCT_NAME}" 
InstallDir "$PROGRAMFILES\${DIR_NAME}" 
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" 
ShowInstDetails show 
ShowUnInstDetails show 





Function GetDotNet 
    IfFileExists "$WINDIR\Microsoft.NET\Framework\v2.0.50727\installUtil.exe" NextStep 
    MessageBox MB_OK|MB_ICONEXCLAMATION "You must have the Microsoft .NET Framework 2.0 Installed to use this application. $\n$\nClick 'Open' in the following file dialog to download and run the Microsoft .NET Framework Installer..." 
    ExecShell Open "http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=0856eacb-4362-4b0d-8edd-aab15c5e04f5&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f5%2f6%2f7%2f567758a3-759e-473e-bf8f-52154438565a%2fdotnetfx.exe" SW_SHOWNORMAL 
    Quit 
NextStep: 
FunctionEnd 


Section "Check Dot Net" SEC02 
Call GetDotNet 

SectionEnd 



Section "MainSection" SEC01 

    SetOutPath "$INSTDIR" 
    SetOverwrite on 
    File ".\bin\Debug\IcnBulkUpload.exe" 
    File ".\bin\Debug\IcnBulkUpload.exe.config" 
    File ".\mine.ICO" 
    CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}" 
    CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\IcnBulkUpload.exe" "" "$INSTDIR\mine.ICO" 
    CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\IcnBulkUpload.exe" "" "$INSTDIR\mine.ICO" 
; CreateDirectory "" 
    CreateShortCut "$STARTMENU.lnk" "$INSTDIR\IcnBulkUpload.exe" 
SectionEnd 

Section -AdditionalIcons 
    CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$INSTDIR\uninst.exe" 
SectionEnd 

Section -Post 
    WriteUninstaller "$INSTDIR\uninst.exe" 
    WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\IcnBulkUpload.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\IcnBulkUpload.exe" 
    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" 
    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" 
SectionEnd 


Function un.onUninstSuccess 
    HideWindow 
    MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was successfully removed from your computer." 
FunctionEnd 

Function un.onInit 
    MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove $(^Name) and all of its components?" IDYES +2 
    Abort 
FunctionEnd 

Section Uninstall 
    Delete "$INSTDIR\uninst.exe" 
    Delete "$INSTDIR\IcnBulkUpload.exe" 
    Delete "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" 
    Delete "$STARTMENU.lnk" 
    Delete "$DESKTOP\iContracts.lnk" 
    Delete "$SMPROGRAMS\${PRODUCT_NAME}\iContracts.lnk" 

    RMDir /r "$SMPROGRAMS\${PRODUCT_NAME}" 
    RMDir /r "$INSTDIR" 
    RMDir "" 

    DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" 
    DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" 
    SetAutoClose true 
SectionEnd 
+0

正当な理由で、最小、完全、および検証可能なサンプルが提案されています - [最小、完全、および検証可能なサンプルを作成する方法](http://stackoverflow.com/help/mcve)誰も問題であるかもしれない点を見つけるために、過度に大きな例を踏み出すことを望んでいない! – idleberg

答えて

0

それは既存のインストールを検出した場合InstallDirRegKey属性は$InstDirを変えます!インストールタイプごとにPRODUCT_UNINST_KEYに一意の値を使用し、それをInstallDirRegKeyが使用するパスとして使用します。

関連する問題