2011-02-21 9 views
1

私は非デフォルトのインストールディレクトリをうまく扱うためにNSISインストーラを微調整しています。問題が発生しました。NSISの別のディレクトリで以前のバージョンをアンインストールする方法は?

$ OLD_INSTDIR私は、レジストリエントリから人口を作成しましたヴァールある
'"$OLD_INSTDIR\uninstall.exe" /S _?=$OLD_INSTDIR' 

:既存のインストールとを介して1がある場合は、既存のアンインストーラを呼び出すための

私のインストーラをチェックします。これはうまくいきますが、私は誰かが既存のインストールがどこからインストールディレクトリを変更し、アンインストーラの実行可能ファイルと古いインストールディレクトリが削除されていないことに気付いたかをテストしています。

少し掘り下げた後、_?= $ OLD_INSTDIRパラメータを使用すると、インストーラはtempディレクトリにコピーされるのではなく、どこで実行されるのか理解しています。これにより、削除が行われない理由が説明されます。

既存のバージョンをアンインストールした後で、アンインストーラとディレクトリを明示的に削除しようとしましたが、これは私にとってはうまくいきません。

ExecWait '$UNINSTALL_OLD_VERSION' 
Delete $OLD_INSTDIR/uninstall.exe 
RmDir $OLD_INSTDIR 

何をすべきかに関するアイデアはありますか?これが何か些細なことである場合にはお詫び申し上げますが、NSISに精通しているのは、インストーラをサンプルから構築し、それから絶対に触れないことです。

答えて

0

_?=%temp%の動作に通常のコピーを停止しますが、アンインストーラが自動的に削除されないようにするため、_?パラメータを指定してアンインストーラを削除してください。

+0

これは私がやっていることであり、動作していません。 '$ UNINSTALL_OLD_VERSION'は変数の上のアンインストーラ行だけです。 – mwtb

+0

しかし、アンインストーラはその作業を行いますか?削除だけが失敗した場合は、Sysinternalのプロセスモニタを試してみることをお勧めします。 – Anders

+0

http://nsis.sourceforge.net/Docs/Chapter4.html#4.9.1に記載されているように:警告:RMDir/r $を使用アンインストーラのINSTDIRは安全ではありません。ほとんどの場合、ユーザーはProgram Filesにインストールされている可能性があります。このコマンドは、アンインストーラとは関係のない他のプログラムを含め、Program Filesフォルダ全体を消去します。ユーザーはプログラムのファイル以外のファイルを置くこともでき、プログラムで削除されることを期待します。解決策は、インストーラによってインストールされたファイルのみをアンインストールするために利用できます。http://nsis.sourceforge.net/Uninstall_only_installed_files –

関連する問題