快捷方式选项有三种选择

时间:2014-09-10 13:37:28

标签: nsis

我们有安装程序可以选择创建快捷方式 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

1 个答案:

答案 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可以使用其他管理员用户提升进程...