NSIS命令排序

NSIS命令排序,nsis,Nsis,一些背景: 以前的安装程序工作正常,但我现在有一个客户坚持要求用户登录到具有“安装”权限的帐户,因此当用户像往常一样重新登录时,将数据写入安装程序的目录是不起作用的 我希望我的安装程序: 将文件安装到$PROGRAMFILES 查找UserDirectory.txt的$PROGRAMFILES(包含用户文件的完整路径-此路径由.exe使用) 如果UserDirectory.txt存在,则 退出(重新安装-UserDirectory.txt可以) 其他的 这是一个新的装置 打开一个对话框,允许用户

一些背景:

以前的安装程序工作正常,但我现在有一个客户坚持要求用户登录到具有“安装”权限的帐户,因此当用户像往常一样重新登录时,将数据写入安装程序的目录是不起作用的

我希望我的安装程序: 将文件安装到$PROGRAMFILES 查找UserDirectory.txt的$PROGRAMFILES(包含用户文件的完整路径-此路径由.exe使用)

如果UserDirectory.txt存在,则 退出(重新安装-UserDirectory.txt可以) 其他的 这是一个新的装置 打开一个对话框,允许用户为用户文件选择目录 将响应写入UserDirectory.txt 写入用户文件

我到目前为止的代码在这里 (请安静地笑!)

我原以为

Install the program

Ask the user where to put the user data
这是一个非常简单的想法。我错过什么了吗


谢谢。

此设计听起来不正确,$PROGRAMFILES中的任何文件都不应包含用户特定的路径,因为$PROGRAMFILES中安装的应用程序由计算机上的所有用户共享

忽略这一点,您的代码包含多个问题,其中最大的一个问题是$InstDir/$ProgramFiles/$ProgDataDir在奇怪的组合中使用有问题

基本安装程序应如下所示:

RequestExecutionLevel admin
InstallDir "$ProgramFiles\MyApp"
;InstallDirRegKey ...

!include MUI2.nsh
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE English

Section
SetOutPath $InstDir ; Set File destination
WriteUninstaller "$InstDir\uninstall.exe"
File MyApp.exe
File /r "Template"
SectionEnd

Section Uninstall
...
SectionEnd
InstallDir
设置$InstDir的默认值
MUI_PAGE_目录
让用户有机会更改$InstDir。在该页之后,您应该只引用$InstDir,而不是$ProgramFiles或任何其他变量

使用
RequestExecutionLevel admin
的安装程序不应接触$PROFILE/$APPDATA/$LOCALAPPDATA,因为您正在为所有用户进行安装,UAC可能会以具有不同配置文件的不同用户身份运行安装程序

如果您有特定于每个用户的某种模板数据,则应用程序(而不是安装程序)应将模板/初始数据从$InstDir复制到$AppData

  • 默认情况下,10个应用程序必须安装到正确的文件夹
  • 10.1默认情况下,您的应用程序必须安装在Program Files文件夹中 对于%ProgramFiles%中的本机32位和64位应用程序,以及 %x64上运行的32位应用程序的程序文件(x86)%用户数据或应用程序 由于安全原因,数据不得存储在此位置 为此文件夹配置的权限。
  • 10.6您的应用程序必须在第一次运行时写入用户数据,而不是在“每台机器”安装过程中写入用户数据 安装应用程序时,没有正确的用户位置 存储数据。应用程序尝试修改默认关联 安装后在机器级别的行为将不成功。 相反,必须在每个用户级别声明默认值,这会阻止 防止多个用户覆盖彼此的默认值
如果您想忽略此建议,以下是违反Microsoft指南的基本版本:

InstallDir "$ProgramFiles\MyApp"
;InstallDirRegKey ...

Var UserDataDir
!include MUI2.nsh
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!define MUI_PAGE_HEADER_SUBTEXT "Blah blah"
!define MUI_DIRECTORYPAGE_TEXT_TOP "Blah blah. Blah blah."
!define MUI_DIRECTORYPAGE_VARIABLE $UserDataDir
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE English

Function .onInit
StrCpy $UserDataDir "$AppData\MyApp" ; Default
FunctionEnd

Section

SetOutPath $InstDir
WriteUninstaller "$InstDir\uninstall.exe"
File MyApp.exe

SetOutPath $UserDataDir
File Template.txt

SetDetailsView show
SetAutoClose false
DetailPrint AppInstall=$InstDir
DetailPrint UserData=$UserDataDir
SectionEnd

Section Uninstall
...
SectionEnd