1

アンインストーラーを呼び出して古いバージョンをアンインストールするNSIS インストーラーがあります。

ExecWait $INSTDIR\uninstall.exe /S _?=$INSTDIR. この_?スイッチは、アンインストールが完了するまでインストーラーを待機させるために使用されます。

アンインストールが完了するまで実際に待機します。しかし、マシンを再起動すると、uninstall.exe下に存在しません$INSTDIR

$INSTDIRアンインストーラー セクションには、スイッチでいくつかのサブディレクトリを削除するコマンドがあります/REBOOTOK

元 :RmDir /r /REBOOTOK $INSTDIR\client

これにより、マシンの再起動時に uninstall.exe が削除されますか?

4

2 に答える 2

0

ExecWaitアンインストーラーを展開するセクションに関して、このステートメントの位置は?

アンインストーラーが自分自身を削除する (またはしようとする) 可能性があり、自分自身を削除する方法に関連して、アンインストーラーと「新しいアンインストーラー」との間に競合がある可能性があります。次回の起動時 (/REBOOTOKオプションを使用する場合)。その後、「新しいアンインストーラー」をデプロイします。同じ名前の場合は、次の起動時に削除されます。

VIAddVersionKey以前とは異なる新しいインストーラーのバージョンを定義するステートメントを試してみることができます。次に、インストール後、それが新しいアンインストーラーか以前のアンインストーラーかを確認します。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperationsまた、次の起動時にアンインストーラーが削除対象としてマークされている場合、アンインストーラーの名前を含む可能性のある multi_sz 値がある場合は、レジストリを調べます。

于 2012-05-03T11:49:29.413 に答える
0

/REBOOTOK の要点は、使用中のファイルを削除することです。しかし、RmDir /r /REBOOTOK $INSTDIR\clientを削除すべきではありません。そこに電話がかかって$INSTDIR\uninstall.exeいないのですか?RmDir /r /REBOOTOK $INSTDIR

ここで /REBOOTOK を使用することは、どのように見てもおそらく良い考えではありません。ユーザーが再起動すると、$INSTDIR\client 内のすべてのファイルが削除されます (古いインストールと新しいフレッシュ インストールのファイル)。

そして、あなたのパスを引用してください:

  • ExecWait '"$INSTDIR\uninstall.exe" /S _?=$INSTDIR'
  • RmDir /r /REBOOTOK "$INSTDIR\client"
于 2012-05-03T11:28:24.403 に答える