我们有安装程序可以选择创建快捷方式 1)为当前用户创建快捷方式 2)为所有用户创建快捷方式 3)不要创建任何快捷方式
第一个选项被选中作为默认选项,如果我检查任何其他选项它运作良好..问题是如果我检查例如第3个选项,移动到下一页并返回有2个选项选中 - 第1个(默认)和第3(选中)。
我是NSIS的新手,无法找到比我更好的方式,因为代码对我来说不是很友好。 我很感激你的建议。
谢谢,
这就是我的安装选项.ini:
[Field 5]
Type=GroupBox
Left=1
Right=-1
Top=80
Bottom=144
Text="Choice of shortcuts:"
State=""
[Field 6]
Type=RadioButton
Left=10
Right=-10
Top=96
Bottom=108
Text="Create shortcuts for all users"
State=1
Flags=GROUP|NOTIFY
[Field 7]
Type=RadioButton
Left=10
Right=-10
Top=112
Bottom=124
Text="Create shortcuts only for a current user"
State=0
Flags=NOTIFY
[Field 8]
Type=RadioButton
Text="Do not create shortcut"
Flags=NOTIFY
State=0
Left=10
Right=-10
Top=128
Bottom=140
然后在nsis脚本中:
IntCmp $ShortcutsForAllUsers 1 ShortcutsForAll ShortcutsForCurrentUser ShortcutsForCurrentUser
ShortcutsForAll:
SetShellVarContext all
goto done
ShortcutsForCurrentUser:
SetShellVarContext current
goto done
NoShortcuts:
goto done
done:
FunctionEnd
答案 0 :(得分:0)
InstallOptions页面应该记住它的状态,只要你不在页面创建回调函数中每次都不提取它。
!include LogicLib.nsh
!include InstallOptions.nsh
ChangeUI All "${NSISDIR}\Contrib\UIs\modern.exe"
Function .onInit
!insertmacro INSTALLOPTIONS_EXTRACT_AS "...\test.ini" "iosp.ini"
FunctionEnd
Var ShortcutMode
Page Custom MyShortcutPageCreate MyShortcutPageLeave
Page Components
Page InstFiles
Function MyShortcutPageCreate
!insertmacro INSTALLOPTIONS_DISPLAY "iosp.ini"
FunctionEnd
Function MyShortcutPageLeave
!insertmacro INSTALLOPTIONS_READ $0 "iosp.ini" "Settings" "State"
${If} $0 > 0
IntOp $ShortcutMode $0 - 6 ; Map .ini Field Id to 0 (or empty), 1 or 2
Abort
${EndIf}
FunctionEnd
Section
${If} $ShortcutMode = 0
SetShellVarContext all
${ElseIf} $ShortcutMode = 1
SetShellVarContext current
${EndIf}
...
SectionEnd
此设计存在问题,SetShellVarContext current
可能无法将$ SMPrograms映射到正确的startmenu文件夹,因为UAC可以使用其他管理员用户提升进程...