Wise Uninstallerはそれ自体を削除しません
-
12-10-2019 - |
質問
私は知っています、私は知っています...賢者の使用をやめてください。それは今のところ私にとって本当に選択肢ではありません。プレートには、まったく新しいインストーラーを書いて、ビルドプロセス全体を変更するにはあまりにも多くのことがあります。
とにかく、問題は、アンインストールexeがアンインストール時に削除されないことです。アプリがインストールされているプログラムファイルフォルダーにあります。アンインストーラーが完了したら、すべてのファイルを削除し、アプリフォルダーを削除する必要があります。代わりに、Uninstallerはアプリフォルダーと一緒に残っています。これは、実行中にそれ自体を削除できないように見えるからです。
私のコンピューターにインストールされている他のすべてのプログラムには、プログラムファイルフォルダーにもアンインストラーが配置されており、アンインストール後に削除されているが、Googleを介して同じ問題を抱えている人を見つけることができないようです。 。ファイルは現在メモリにロードされているため、ファイルを削除できないことは理にかなっていますが、 *泣き言 *他の誰もができます...なぜ私はできませんか?
編集: それが役立つ場合は、Wise Installation Studio 7.0を実行し、Wisescriptパッケージエディターのアンインストールスクリプトを変更しています。プログラムファイルフォルダーを削除する部分は Delete File(s) %MAINDIR%\*.*
ここで、%MainDIR%はプログラムファイルのアプリフォルダーです。このコマンドには2つの利用可能なオプションがあります(どちらもオンになっています) - サブディレクトリを含め、ファイルを含むディレクトリを削除します。
解決
それで、私がやったことは、より良いインストーラーが何をするかを再現することでした。アンインストラーチェックがあり、%Temp%ディレクトリから実行されているかどうかを確認します。そうでない場合は、Tempフォルダーにコピーしてそこから実行するように指示します。次に、レジストリキーに追加することにより、再起動時に削除されるように、TEMPフォルダーの1つをマークします。
HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations
@altie: あなたのソリューションはおそらくうまく機能していたでしょうが、私はこのソリューションがもっと好きだと思います。それはよりきれいで、より堅牢なようです。しかし、サンプルコードを提供してくれてありがとう...私は時々バッチファイルを書き込み、ループや「タスクリスト」コマンドの知識がありませんでした。これは将来的に有用であることが証明される可能性があります!
他のヒント
他の方法が見つからない場合は、汚いトリックがあります。インストーラーの最後のステップを作成して、賢明なプロセスが終了するのを待ってから削除するCMD.exeを発射します。
タスクリストを使用したバッチスクリプトでこれを行う方法の例:
rem Expand variables delayed with !! syntax for for loop
setlocal EnableExtensions EnableDelayedExpansion
rem Create a loop with a label and goto
:loopstart
for /F "delims= " %%a in ('tasklist /FI "imagename eq wiseuninstaller.exe"') do (
if not "%%a"=="INFO: No tasks are running which match the specified criteria." (
set stillrunning=no
) else (
set stillrunning=yes
rem Add a 5 second delay with ping and throw out the output.
ping -n 5 > NUL 2>&1
)
)
if "!stillrunning!"=="yes" goto :loopstart
del wiseuninstaller.exe
このコードをテストしていないか、構文エラーがあまりチェックしていませんが、近いです。 for /?
と tasklist /?
コマンドラインから、これをニーズに合わせて調整する方法を見つけるのに役立ちます。