首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSIS FileRead条件覆盖

NSIS FileRead条件覆盖
EN

Stack Overflow用户
提问于 2022-02-18 22:58:10
回答 1查看 71关注 0票数 0

我应该需要你的帮助,因为我不是一个程序员(请怜悯我)。我需要在现有的NSIS脚本中添加一个功能如下:

将名为169.254.1.1的值检查到名为myfile.ini的INI文件中,并放置在

c:\mydirectory

如果它在myfile.ini中找到了这个值,那么它就不应该做任何其他事情(即让脚本执行接下来的步骤)。

如果它没有在myfile.ini中找到这个值,它应该重写该文件。

通过静默地从c:\dummyfile\myfile.ini复制另一个

然后让脚本执行接下来的步骤。

我不知道如何告诉NSIS这样做,我可以请求您的帮助吗?

提前感谢你的专业知识。

梅莱娜。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-19 13:45:06

如果您的文件是一个包含部分的实际.INI文件,那么您可以只使用INI函数:

代码语言:javascript
运行
复制
Section "Prepare INI example"
InitPluginsDir
WriteIniStr "$PluginsDir\MyFile.ini" ServerInfo ServerAddress "169.254.1.1"
WriteIniStr "$PluginsDir\Dummy.ini" ServerInfo ServerAddress "127.0.0.1"
SectionEnd

!include LogicLib.nsh
Section
ReadIniStr $0 "$PluginsDir\MyFile.ini" ServerInfo ServerAddress
ReadIniStr $1 "$PluginsDir\MyFile.ini" ServerInfo ServerAddressBck
${If} $0 != "169.254.1.1"
${AndIf} $1 != "169.254.1.1"
    CopyFiles /SILENT /FILESONLY "$PluginsDir\Dummy.ini" "$PluginsDir\MyFile.ini"
${EndIf}
SectionEnd

如果您没有真正的.INI文件,只有一个带有name=value对的文件,那么您必须手动解析:

代码语言:javascript
运行
复制
Section "Prepare fake INI example"
InitPluginsDir
FileOpen $0 "$PluginsDir\MyFile.ini" w
FileWrite $0 'Foo$\r$\n'
FileWrite $0 'Bar$\r$\n'
FileWrite $0 'ServerAddress=169.254.1.1$\r$\n'
FileWrite $0 'Baz$\r$\n'
FileClose $0
WriteIniStr "$PluginsDir\Dummy.ini" ServerInfo ServerAddress "127.0.0.1"
SectionEnd

!include LogicLib.nsh

Function TrimTrailingNewlinesAndSpaces
Exch $1
Push $2
again:
    StrCpy $2 $1 "" -1
    StrCmp $2 " " +3
    StrCmp $2 "$\r" +2
    StrCmp $2 "$\n" +1 +3
    StrCpy $1 $1 -1
    Goto again
Pop $2
Exch $1
FunctionEnd

Section
StrCpy $2 "" ; Have not found the magic line
ClearErrors
FileOpen $0 "$PluginsDir\MyFile.ini" r
loop:
    FileRead $0 $1
    IfErrors done
    Push $1
    Call TrimTrailingNewlinesAndSpaces
    Pop $1
    ${If} $1 == "ServerAddress=169.254.1.1"
    ${OrIf} $1 == "ServerAddressBck=169.254.1.1"
        StrCpy $2 1
    ${Else}
        Goto loop
    ${EndIf}
done:
FileClose $0
${If} $2 = 0
    CopyFiles /SILENT /FILESONLY "$PluginsDir\Dummy.ini" "$PluginsDir\MyFile.ini"
${EndIf}
SectionEnd
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71180778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档