如何解决偏移的奇怪行为
我有以下代码
ClearErrors
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Office\ClickToRun\Configuration" "ProductReleaseIds"
IfErrors done ;+19 if error
${StrLoc} $R1 $R0 "365" ">"
StrCmp $R1 "" next 0 ;+8 if substring is not found
ReadRegStr $R1 HKLM "SOFTWARE\Microsoft\Office\ClickToRun\Configuration" "Platform"
${If} $R1 = "x86"
StrCpy $R1 "365x32"
${Else}
StrCpy $R1 "365x64"
${EndIf}
Goto found_${ID}
next: ${StrLoc} $R1 $R0 "2019" ">"
StrCmp $R1 "" done 0 ;+8 if substring is not found
ReadRegStr $R1 HKLM "SOFTWARE\Microsoft\Office\ClickToRun\Configuration" "Platform"
${If} $R1 = "x86"
StrCpy $R1 "2019x32"
${Else}
StrCpy $R1 "2019x64"
${EndIf}
Goto found_${ID}
done: ClearErrors
即使在代码编译期间没有出现错误/警告,代码行为也不如预期。经过 2 小时“富有想象力”的调试,我明白了我遇到的奇怪行为的原因。
在最后的代码中,我使用了“下一步”和“完成”标签,我所有的问题都消失了!一开始我使用数字进行跳转(请查看注释字符串中的数字,这些数字本应有效,但实际上却无效!)。
有没有人知道为什么那些用来跳跃的数字是错误的?
在正常情况下,我发誓我数到 20 都没有问题,但似乎情况并非如此:)
解决方法
您不应该使用偏移量跳过宏,因为您不知道它们包含多少指令(并且可能会在 NSIS 版本之间发生变化)。
就您而言,StrLoc 和 If/Else/EndIf 是宏。
标签在生成的安装程序中的开销为零,应该在大多数地方使用(和/或 If/EndIf)。直接偏移在宏中很有用,这些宏可能在同一函数/部分中多次包含,您不能使用 If/EndIf/While(罕见)但它很快就会失控。您可以使用类似 const BundleTracker = require("webpack-bundle-tracker");
module.exports = {
// on Windows you might want to set publicPath: "http://127.0.0.1:8080/" otherwise http://0.0.0.0:8080/
publicPath: "http://0.0.0.0:8080/",outputDir: './dist/',chainWebpack: config => {
config
.plugin('BundleTracker')
.use(BundleTracker,[{filename: './webpack-stats.json'}])
config.output
.filename('bundle.js')
config.optimization
.splitChunks(false)
config.resolve.alias
.set('__STATIC__','static')
config.devServer
// the first 3 lines of the following code have been added to the configuration
.public('http://127.0.0.1:8080')
.host('127.0.0.1')
.port(8080)
.hotOnly(true)
.watchOptions({poll: 1000})
.https(false)
.disableHostCheck(true)
.headers({"Access-Control-Allow-Origin": ["\*"]})
},// uncomment before executing 'npm run build'
// css: {
// extract: {
// filename: 'bundle.css',// chunkFilename: 'bundle.css',// },// }
};
的内容为这样的宏创建标签:
!define MyLabel L${__COUNTER__}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。