2017-08-23 13 views
0

[Version]DisplayVersion=0.0.298と似ているINI文字列を更新して、フォルダ内に新しいディレクトリを見つけようとしています。現在のINI文字列、0.0.298は、..\app-0.0.298のような現在のディレクトリと一致します。FindFirstを使用してINI文字列を更新します。

実行時にアプリケーションが自動的に更新され、..\app-0.0.301のような新しいフォルダが作成されます。私がしたいのは、このディレクトリを見つけて、新しいバージョン番号を[Version]DisplayVersionに書き込んで、新しい更新バージョンと一致させると、[Version]DisplayVersion=0.0.301のようになります。

私が働いていないされ、これまでにこれを持っている:

FindFirst $0 $1 `${APPDIR}\app-*` 
ReadEnvStr $2 BUILD # Set earlier in the script ($2 = 0.0.298) 
StrCmp $1 "" +11 
Push `$2.0` 
Push `$1.0` 
Call VersionCompare # http://nsis.sourceforge.net/VersionCompare 
Pop $3 
IntCmp $3 1 +4 +4 0 
IfFileExists `${APPDIR}\app-$1\${APP}.exe` 0 +3 
DeleteINIStr "${InfoINI}" "Version" "DisplayVersion" 
WriteINIStr "${InfoINI}" "Version" "DisplayVersion" "$1" 
FindNext $0 $1 
Goto -10 
FindClose $0 

何を私がここに存在しないか、またはこれを実行する良い方法はありますでしょうか?

+0

何を動作しない、使用のラベルを読んで(および変更)するためのコード難しくなりますか?ディレクトリ列挙? VersionCompare?イニ処理?そして、APPDIRとInfoINIは何と定義されていますか? – Anders

答えて

1

FindFirstにワイルドカードを渡しても、返されるファイル名には全体の名前が含まれ、0.0.298.0app-0.0.298.0を比較することになります。

Section "-Initialize example" 
!define APP "MyApp" 
!define APPDIR "$temp\Test" 
!define InfoINI "$temp\Test\app.ini" 
CreateDirectory "${APPDIR}\app-0.0.298" 
WriteINIStr "${InfoINI}" "Version" "DisplayVersion" "0.0.298" 
System::Call 'KERNEL32::SetEnvironmentVariable(t "BUILD", t "0.0.298")' 
SectionEnd 

!include LogicLib.nsh 

Page Components 
Page InstFiles 

Section "Emulate a update" 
CreateDirectory "${APPDIR}\app-0.0.301" 
File "/oname=${APPDIR}\app-0.0.301\${APP}.exe" "${__FILE__}" 
SectionEnd 


Section "Test" 
SectionIn RO 
FindFirst $0 $1 `${APPDIR}\app-*` 
ReadEnvStr $2 BUILD # Set earlier in the script ($2 = 0.0.298) 
loop: 
    StrCmp $1 "" done 
    StrCpy $3 $1 4 
    StrCmp $3 "app-" 0 trynext 
    StrCpy $1 $1 "" 4 ; Remove "app-" prefix 
    Push `$2.0` 
    Push `$1.0` 
    Call VersionCompare # http://nsis.sourceforge.net/VersionCompare 
    Pop $3 
    ${If} $3 > 1 
     ${If} ${FileExists} "${APPDIR}\app-$1\${APP}.exe" 
      # DeleteINIStr "${InfoINI}" "Version" "DisplayVersion" ; You don't have to delete before writing 
      WriteINIStr "${InfoINI}" "Version" "DisplayVersion" "$1" 
     ${EndIf} 
    ${EndIf} 
    trynext: 
     FindNext $0 $1 
    Goto loop 
done: 
FindClose $0 
SectionEnd 

ヒント:相対的なジャンプを使用すると、および/またはLogicLib.nsh

+0

私はよく知っていたはずだったが、もしそうでなければ、今私はそうしている。 Andersに感謝します。私は何かを見ることができず、あなたの目が常に私のために来るとき、私は通常別の目のセットが必要です。 –

関連する問題