我应该需要你的帮助,因为我不是一个程序员(请怜悯我)。我需要在现有的NSIS脚本中添加一个功能如下:
将名为169.254.1.1的值检查到名为myfile.ini的INI文件中,并放置在
c:\mydirectory
如果它在myfile.ini中找到了这个值,那么它就不应该做任何其他事情(即让脚本执行接下来的步骤)。
如果它没有在myfile.ini中找到这个值,它应该重写该文件。
通过静默地从c:\dummyfile\myfile.ini复制另一个
然后让脚本执行接下来的步骤。
我不知道如何告诉NSIS这样做,我可以请求您的帮助吗?
提前感谢你的专业知识。
梅莱娜。
发布于 2022-02-19 13:45:06
如果您的文件是一个包含部分的实际.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 $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对的文件,那么您必须手动解析:
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
https://stackoverflow.com/questions/71180778
复制相似问题