2013-05-29 98 views
0

我有一个Windows 7系统以管理员身份登录,我无法安装到根目录(c:\ MyAPP)。如果我为所有用户安装,它将文件放在C:\ Program Files(x86)\ C \ MyAPP中。如果我为单个用户安装,则会将该文件放入该用户应用程序数据目录中或类似的东西。我将AllowRootDirInstall设置为true。我在bug报告中发现了一个假想的工作。无法安装应用程序到NSIS根目录

CreateDirectory $INSTDIR 
StrCpy $OUTDIR $INSTDIR 

甚至没有说把它放在哪里,所以我只是把它放在主要部分的顶部。

任何想法我缺少什么?

NSIS脚本

# Auto-generated by EclipseNSIS Script Wizard 
# 28-May-2013 2:27:56 PM 

Name MyApplication 

# General Symbol Definitions 
!define REGKEY "SOFTWARE\$(^Name)" 
!define VERSION 1.0 
!define COMPANY mycompany 
!define URL http://mycompany.com 

# MultiUser Symbol Definitions 
!define MULTIUSER_EXECUTIONLEVEL Highest 
!define MULTIUSER_INSTALLMODE_DEFAULT_CURRENTUSER 
!define MULTIUSER_MUI 
!define MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY "${REGKEY}" 
!define MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME MultiUserInstallMode 
!define MULTIUSER_INSTALLMODE_COMMANDLINE 
!define MULTIUSER_INSTALLMODE_INSTDIR C:\MyAPP 
!define MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY "${REGKEY}" 
!define MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUE "Path" 

# MUI Symbol Definitions 
!define MUI_FINISHPAGE_NOAUTOCLOSE 
!define MUI_UNFINISHPAGE_NOAUTOCLOSE 

# Included files 
!include MultiUser.nsh 
!include Sections.nsh 
!include MUI2.nsh 

# Variables 
Var StartMenuGroup 

# Installer pages 
!insertmacro MUI_PAGE_WELCOME 
!insertmacro MULTIUSER_PAGE_INSTALLMODE 
!insertmacro MUI_PAGE_INSTFILES 
!insertmacro MUI_PAGE_FINISH 
!insertmacro MUI_UNPAGE_CONFIRM 
!insertmacro MUI_UNPAGE_INSTFILES 

# Installer languages 
!insertmacro MUI_LANGUAGE English 

# Installer attributes 
OutFile myapp-1.0-installer.exe 

InstallDir "C:\MyAPP" 
CRCCheck on 
XPStyle on 
ShowInstDetails show 
AllowRootDirInstall true 
VIProductVersion 1.0.0.0 
VIAddVersionKey ProductName Proshots 
VIAddVersionKey ProductVersion "${VERSION}" 
VIAddVersionKey CompanyName "${COMPANY}" 
VIAddVersionKey CompanyWebsite "${URL}" 
VIAddVersionKey FileVersion "${VERSION}" 
VIAddVersionKey FileDescription "" 
VIAddVersionKey LegalCopyright "" 
InstallDirRegKey HKLM "${REGKEY}" Path 
ShowUninstDetails hide 

# Installer sections 
Section -Main SEC0000 
    CreateDirectory $INSTDIR 
    StrCpy $OUTDIR $INSTDIR 
    SetOutPath $INSTDIR 
    SetOverwrite off 
    File subjects.xml 
    File messages.xml 
    SetOverwrite on 
    File myapp-run.bat 
    SetOutPath $SMPROGRAMS\$StartMenuGroup 
    CreateShortcut $SMPROGRAMS\$StartMenuGroup\MyAPP.lnk $INSTDIR\myapp-run.bat 
    SetOutPath $INSTDIR 
    File C:\fotonow-working\myapp.jar 
    WriteRegStr HKLM "${REGKEY}\Components" Main 1 
SectionEnd 

Section -post SEC0001 
    WriteRegStr HKLM "${REGKEY}" Path $INSTDIR 
    SetOutPath $INSTDIR 
    WriteUninstaller $INSTDIR\uninstall.exe 
    SetOutPath $SMPROGRAMS\$StartMenuGroup 
    CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk" $INSTDIR\uninstall.exe 
    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)" 
    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayVersion "${VERSION}" 
    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" Publisher "${COMPANY}" 
    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" URLInfoAbout "${URL}" 
    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayIcon $INSTDIR\uninstall.exe 
    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" UninstallString $INSTDIR\uninstall.exe 
    WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoModify 1 
    WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoRepair 1 
SectionEnd 

# Macro for selecting uninstaller sections 
!macro SELECT_UNSECTION SECTION_NAME UNSECTION_ID 
    Push $R0 
    ReadRegStr $R0 HKLM "${REGKEY}\Components" "${SECTION_NAME}" 
    StrCmp $R0 1 0 next${UNSECTION_ID} 
    !insertmacro SelectSection "${UNSECTION_ID}" 
    GoTo done${UNSECTION_ID} 
next${UNSECTION_ID}: 
    !insertmacro UnselectSection "${UNSECTION_ID}" 
done${UNSECTION_ID}: 
    Pop $R0 
!macroend 

# Uninstaller sections 
Section /o -un.Main UNSEC0000 
    Delete /REBOOTOK $INSTDIR\myapp.jar 
    Delete /REBOOTOK $SMPROGRAMS\$StartMenuGroup\MyAPP.lnk 
    Delete /REBOOTOK $INSTDIR\myapp-run.bat 
    Delete /REBOOTOK $INSTDIR\messages.xml 
    Delete /REBOOTOK $INSTDIR\subjects.xml 
    DeleteRegValue HKLM "${REGKEY}\Components" Main 
SectionEnd 

Section -un.post UNSEC0001 
    DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" 
    Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk" 
    Delete /REBOOTOK $INSTDIR\uninstall.exe 
    DeleteRegValue HKLM "${REGKEY}" Path 
    DeleteRegKey /IfEmpty HKLM "${REGKEY}\Components" 
    DeleteRegKey /IfEmpty HKLM "${REGKEY}" 
    RmDir /REBOOTOK $SMPROGRAMS\$StartMenuGroup 
    RmDir /REBOOTOK $INSTDIR 
SectionEnd 

# Installer functions 
Function .onInit 
    InitPluginsDir 
    StrCpy $StartMenuGroup MyAPP 
    !insertmacro MULTIUSER_INIT 
FunctionEnd 

# Uninstaller functions 
Function un.onInit 
    StrCpy $StartMenuGroup MyAPP 
    !insertmacro MULTIUSER_UNINIT 
    !insertmacro SELECT_UNSECTION Main ${UNSEC0000} 
FunctionEnd 

回答

1

从文档:MULTIUSER_INSTALLMODE_INSTDIR:

中安装应用程序,没有 路径的文件夹名称。此文件夹将位于Program Files的每台机器 安装在本地应用程序数据文件夹中的每个用户 安装

如果你总是要安装到您不应该使用多用户的根因为只有管理员可以写入驱动器的根...

+0

谢谢,为我解决它。由于应用程序基本上对文件进行排序,所以需要在包括安装目录在内的目录上编写适当的权限,因此Windows问题的UAC设置加剧了我的问题。我可以将配置文件移动到另一个目录,但这不是客户想要的。 – Codeguy007

0

我的解决办法是从NSIS切换到Inno Setup with istool如在

什么是构建Windows安装程序的最佳选择接受的答案建议?

到目前为止,我可以安装到c:\ MyApp,并且安装了最新版本的jre。

相关问题