2016-03-23 10 views
2

Chrome verfügt über ein Installationsprogramm, das zur systemweiten Installation oder zum Basisverzeichnis eines Benutzers verwendet werden kann, wenn es sich nicht um einen Administrator handelt. Dies ist nützlich, wenn Sie in einer Unternehmensumgebung bereitstellen, in der Sie Ihren potenziellen Benutzern die Installation auch dann ermöglichen möchten, wenn sie nicht unbedingt über die entsprechenden Berechtigungen verfügen.Kann ich NSIS dazu bringen, ein einzelnes Installationsprogramm für die lokale Bereitstellung und Systembereitstellung zu erstellen?

Kann NSIS zum Erstellen eines solchen Installationsprogramms verwendet werden?

Antwort

1

Stellt sich heraus es kann. Die wichtigen Teile sind:

  • RequestExecutionLevel highest: Dies stellt sicher, dass das Installationsprogramm die höchsten Berechtigungen für das Benutzerkonto erhält. Wenn sie sich in der Administratorgruppe befinden, wird das Installationsprogramm nach einer Eskalation der Rechte fragen.
  • Bestimmen, ob der Benutzer ein Administrator ist oder nicht. Dies wird mit dem UserInfo-Plugin erreicht. Es ist einfach genug.
  • SetShellVarContext all|current: Dies bestimmt den Wert der speziellen Registrierung Root-Schlüssel SHCTX. Mit all bedeutet es dasselbe wie HKLM (systemweit), für current ergibt es HKCU. SetShellVarContext beeinflusst auch, ob der Wert $SMPROGRAMS sich auf das systemweite Startmenü oder auf die Hierarchie des Benutzers bezieht.
  • Hier ist ein Skelett für ein Installationsprogramm, das abhängig von den Berechtigungen des Benutzerkontos systemweit oder lokal bereitgestellt werden kann. Es verwendet C: \ Windows \ write.exe als seine Nutzlast und installiert optional Startmenüelemente und eine Desktopverknüpfung. Außerdem wird ein Verweis auf das Deinstallationsprogramm in der Registrierung hinzugefügt, sodass es im Dialogfeld "Software" angezeigt wird. Ich habe NSIS 3.0 (Beta) verwendet, um dies zu erstellen, aber ich sehe keinen offensichtlichen Grund, warum es nicht mit einem aktuellen 2.x funktionieren würde.

    !include "MUI2.nsh" 
    
    !define PRODUCT_NAME "DummyProduct" 
    !define VERSION "0.0.1" 
    
    Var INSTDIR_BASE 
    
    Name "${PRODUCT_NAME}" 
    OutFile "${PRODUCT_NAME} Installer.exe" 
    
    InstallDir "" 
    
    ; Take the highest execution level available 
    ; This means that if it's possible to, we become an administrator 
    RequestExecutionLevel highest 
    
    !macro ONINIT un 
        Function ${un}.onInit 
         ; The value of SetShellVarContext detetmines whether SHCTX is HKLM or HKCU 
         ; and whether SMPROGRAMS refers to all users or just the current user 
         UserInfo::GetAccountType 
         Pop $0 
         ${If} $0 == "Admin" 
          ; If we're an admin, default to installing to C:\Program Files 
          SetShellVarContext all 
          StrCpy $INSTDIR_BASE "$PROGRAMFILES64" 
         ${Else} 
          ; If we're just a user, default to installing to ~\AppData\Local 
          SetShellVarContext current 
          StrCpy $INSTDIR_BASE "$LOCALAPPDATA" 
         ${EndIf} 
    
         ${If} $INSTDIR == "" 
          ; This only happens in the installer, because the uninstaller already knows INSTDIR 
          ReadRegStr $0 SHCTX "Software\${PRODUCT_NAME}" "" 
    
          ${If} $0 != "" 
           ; If we're already installed, use the existing directory 
           StrCpy $INSTDIR "$0" 
          ${Else} 
           StrCpy $INSTDIR "$INSTDIR_BASE\${PRODUCT_NAME}" 
          ${Endif} 
         ${Endif} 
        FunctionEnd 
    !macroend 
    
    ; Define the function twice, once for the installer and again for the uninstaller 
    !insertmacro ONINIT "" 
    !insertmacro ONINIT "un" 
    
    !define MUI_ABORTWARNING 
    
    !define MUI_COMPONENTSPAGE_NODESC 
    !insertmacro MUI_PAGE_COMPONENTS 
    
    !insertmacro MUI_PAGE_DIRECTORY 
    
    Var STARTMENU_FOLDER 
    !define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX" 
    !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\${PRODUCT_NAME}" 
    !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" 
    !insertmacro MUI_PAGE_STARTMENU ${PRODUCT_NAME} $STARTMENU_FOLDER 
    
    !insertmacro MUI_PAGE_INSTFILES 
    !insertmacro MUI_UNPAGE_CONFIRM 
    !insertmacro MUI_UNPAGE_INSTFILES 
    
    !insertmacro MUI_LANGUAGE "English" 
    
    Section "-Main Component" 
        SetOutPath "$INSTDIR" 
    
        File "C:\Windows\write.exe" 
    
        WriteRegStr SHCTX "Software\${PRODUCT_NAME}" "" $INSTDIR 
    
        ; These registry entries are necessary for the program to show up in the Add/Remove programs dialog 
        WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "DisplayName" "${PRODUCT_NAME}" 
        WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "UninstallString" '"$INSTDIR\Uninstall.exe"' 
        WriteRegDWORD SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "NoModify" 1 
        WriteRegDWORD SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "NoRepair" 1 
    
        WriteUninstaller "$INSTDIR\Uninstall.exe" 
    
        !insertmacro MUI_STARTMENU_WRITE_BEGIN ${PRODUCT_NAME} 
         CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER\" 
         CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\${PRODUCT_NAME}.lnk" "$INSTDIR\write.exe" 
        !insertmacro MUI_STARTMENU_WRITE_END 
    SectionEnd 
    
    Section "Desktop shortcut" 
        CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\write.exe" 
    SectionEnd 
    
    Section "Uninstall" 
        Delete "$INSTDIR\write.exe" 
    
        Delete "$INSTDIR\Uninstall.exe" 
    
        RMDir /r "$INSTDIR" 
    
        !insertmacro MUI_STARTMENU_GETFOLDER ${PRODUCT_NAME} $STARTMENU_FOLDER 
        Delete "$SMPROGRAMS\$STARTMENU_FOLDER\${PRODUCT_NAME}.lnk" 
        RMDir /r "$SMPROGRAMS\$STARTMENU_FOLDER" 
    
        Delete "$DESKTOP\${PRODUCT_NAME}.lnk" 
    
        DeleteRegKey /ifempty SHCTX "Software\${PRODUCT_NAME}" 
    
        DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" 
    SectionEnd 
    
    +0

    Das sieht ziemlich gut aus, aber Sie können SHCTX als Deinstallations-HKEY verwenden, da Windows pro Benutzer Einträge unterstützt. $ PROGRAMFILES64 sollte nur verwendet werden, wenn Sie eine 64-Bit-Anwendung installieren. Sie können auch die Multiuser-Header-Datei anzeigen, die mit NSIS ausgeliefert wird, wenn Sie eine Seite mit Optionsfeldern auswählen möchten, um den Installationstyp auszuwählen. Die Windows-Richtlinien geben schließlich an, dass Sie keine Startverknüpfungen im Startmenü erstellen sollten. – Anders

    +0

    Aha, das wusste ich nicht. Ich werde meine Antwort testen und ändern. –

    Verwandte Themen