1

NSISインストーラーは、かなり大きなフォルダー構造を作成します。インストーラーが起動すると、レジストリをチェックして、現在のバージョンがインストールされているかどうかを確認します...

次に、現在のフォルダのバックアップを作成するかどうかを尋ねられます。

ほとんどの場合は機能しますが、古いバージョンをバックアップする場合は、ディレクトリ全体をコピーするのではなく、アイコンのみをコピーすることがあります。

!insertmacro un.MoveFolder "$INSTDIR" "${BACKUP_FOLDER}" "*.*"

参照: http: //nsis.sourceforge.net/MoveFileFolder

!insertmacro MoveFolder "$INSTDIR\[path\]source-folder[\]" "$INSTDIR\[path\]destination-folder[\]" "file-mask"

その後、削除セクションに移動します...

それをする時間がないということでしょうか?移動を完了する前に次のプロセスを開始しますか?

フォルダ全体をコピーしないように、他に何が起こっている可能性がありますか?

インストーラーの間に、私は見る

Create folder c:\backup_folder
Moving files: c:\current_folder\*.* to c:\backup_folder\
Delete file: c:\current_folder\file1.........

そして最後に、backup_folderにはアイコンのみがあります(すべてのファイルではありません)

編集:解決策-ここで私の投稿を参照してくださいNSISのフォルダ移動の難しさ-$ INSTDIRは確かに特別なフォルダなので、アンインストーラを$TEMPフォルダに移動する必要がありました。

4

1 に答える 1

1

CopyFiles組み込みコマンドを使用できない理由はありますか?

これをデバッグするにDetailPrintは、関数の上部近くに追加することをお勧めします.MoveFolder_Locate_moveFile。すべてのファイル名が通過するのを見る場合、問題はその関数の移動操作です。そうでない場合、問題は${Locate}このコードで使用されるマクロにあります。

もう1つの方法は、ProcessMonitorを使用してファイルシステムの動作を監視することです...

于 2012-06-27T03:30:11.493 に答える