NSIS FileRead 条件覆盖

NSIS FileRead conditional override

我不是程序员,所以需要你的帮助(请怜悯我)。 我应该需要在现有的 NSIS 脚本中添加一个执行以下操作的函数:

检查名为 169.254.1.1 的值是否存在于名为 myfile.ini 的 INI 文件中并放置在

c:\我的目录

如果它在 myfile.ini 中找到这个值,它不应该做任何其他事情(即让脚本执行后续步骤)。

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

与另一个通过从 c:\dummyfile\myfile.ini

中静默复制

然后让脚本执行后续步骤。

我不知道如何告诉 NSIS 这样做,请问您能帮忙吗?

提前感谢您的专业知识。

美莲娜。

如果您的文件是包含 [sections] 的实际 .INI 文件,那么您可以只使用 INI 函数:

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 [=10=] "$PluginsDir\MyFile.ini" ServerInfo ServerAddress
ReadIniStr  "$PluginsDir\MyFile.ini" ServerInfo ServerAddressBck
${If} [=10=] != "169.254.1.1"
${AndIf}  != "169.254.1.1"
    CopyFiles /SILENT /FILESONLY "$PluginsDir\Dummy.ini" "$PluginsDir\MyFile.ini"
${EndIf}
SectionEnd

如果您没有真正的 .INI 文件,只有名称=值对的文件,那么您必须手动解析:

Section "Prepare fake INI example"
InitPluginsDir
FileOpen [=11=] "$PluginsDir\MyFile.ini" w
FileWrite [=11=] 'Foo$\r$\n'
FileWrite [=11=] 'Bar$\r$\n'
FileWrite [=11=] 'ServerAddress=169.254.1.1$\r$\n'
FileWrite [=11=] 'Baz$\r$\n'
FileClose [=11=]
WriteIniStr "$PluginsDir\Dummy.ini" ServerInfo ServerAddress "127.0.0.1"
SectionEnd

!include LogicLib.nsh

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

Section
StrCpy  "" ; Have not found the magic line
ClearErrors
FileOpen [=11=] "$PluginsDir\MyFile.ini" r
loop:
    FileRead [=11=] 
    IfErrors done
    Push 
    Call TrimTrailingNewlinesAndSpaces
    Pop 
    ${If}  == "ServerAddress=169.254.1.1"
    ${OrIf}  == "ServerAddressBck=169.254.1.1"
        StrCpy  1
    ${Else}
        Goto loop
    ${EndIf}
done:
FileClose [=11=]
${If}  = 0
    CopyFiles /SILENT /FILESONLY "$PluginsDir\Dummy.ini" "$PluginsDir\MyFile.ini"
${EndIf}
SectionEnd