如何解决在卸载模式下使用嵌套在宏中的 StrLoc
我不是 NSIS 的专家用户...在编译脚本时我收到以下错误:
<div class="characterChoices hoverEffect" id="rogue">
<button class="flex optionBackground classChoice" id="rogueButton" type="button">
<div class="classselection">
<div class="sectioninfowrapper">
<h3>ROGUE</h3>
<img src="img/infoicon1.png" class="infoiconwrapper2" id="roguePopup">
<span class="hidden popupStyling" id="rogueInfoPopup">Rogues are real sneaky.</span>
</div>
<img src="img/banner.png" width="100%">
<div class="sectioninfowrapper">
<p>Primary Ability</p>
<img src="img/infoicon1.png" class="infoiconwrapper1" id="roguePrimaryAbilityPopup">
<span class="hidden popupStyling" id="roguePrimaryAbilityInfoPopup">You're naturally light on your feet.</span>
</div>
<p class="classinfo">Dexterity</p>
</div>
<img src="img/rogue.png" alt="rogue">
</button>
</div>
卸载时调用以下函数:
!insertmacro: FUNCTION_STRING_StrLoc_Call
Call must be used with function names starting with "un." in the uninstall section.
反过来,下面的代码也被调用:
Function un.Uninstall
; some code
${un.GetMsOfficeVersion} $R0
; some code
FunctionEnd
我知道问题是由于调用了 !macro GetMsOfficeVersion
; some code
StrCpy $R0 0
loop:
ClearErrors
EnumRegValue $R1 HKCU "Microsoft\Office\16.0\Common\Licensing\LastKnownC2RProductReleaseId" $R0
IfErrors done
IntOp $R0 $R0 + 1
ReadRegStr $R2 HKCU "Microsoft\Office\16.0\Common\Licensing\LastKnownC2RProductReleaseId" $R1
${StrLoc} $R1 "$R2" "365" ">"
StrCmp $R1 "" +3 0 ;+3 if substring is not found
StrCpy $R1 "16.0"
Goto found
${StrLoc} $R1 "$R2" "2019" ">"
StrCmp $R1 "" loop 0 ;loop if substring is not found
StrCpy $R1 "16.0"
Goto found
done:
; other code
!macroend
!macro _GetMsOfficeVersion Result
${CallArtificialFunction} GetMsOfficeVersion
Pop "${Result}"
!macroend
; Insert function as an installer and uninstaller function.
!define GetMsOfficeVersion "!insertmacro _GetMsOfficeVersion"
!define un.GetMsOfficeVersion "!insertmacro _GetMsOfficeVersion"
函数。安装模式和卸载模式应该是不同的,也就是${StrLoc}
和${StrLoc}
,但是不知道怎么用这个代码结构
任何帮助将不胜感激...提前致谢
解决方法
您可以检查 __UNINSTALL__
定义以判断您是否在卸载程序代码中:
!include StrFunc.nsh
${StrLoc}
${UnStrLoc}
!macro testmacro
!ifdef __UNINSTALL__
!define /ReDef MyUn "un"
!else
!define /ReDef MyUn ""
!endif
StrCpy $R2 "3654321"
${${MyUn}StrLoc} $R1 "$R2" "365" ">"
DetailPrint $R1
!macroend
Section
!insertmacro testmacro
Goto +2
WriteUninstaller $Temp\Un.exe
SectionEnd
Section Uninstall
!insertmacro testmacro
SectionEnd
这个不太理想,我看看下个版本能不能让StrFunc使用CallArtificialFunction。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。