0

アンインストーラーを呼び出して古いバージョンのプログラムを自動的にアンインストールするNSISインストーラーがあります。 http://nsis.sourceforge.net/Auto-uninstall_old_before_installing_new

残念ながら、ユーザーがインストールをクリックし、アンインストールを実行する前にインストーラーを実行してから、アンインストールを続行する可能性があります...

アンインストールがアクティブなときにインストーラーをバックグラウンドで強制する方法はありますか?

編集:「インストール」ボタンを無効にしようとしました、

  ClearErrors
  ;disable the Install button
  GetDlgItem $R1 $HWNDPARENT 0
  EnableWindow $R1 0
  ...
done:
  ;disable the Install button
  GetDlgItem $R1 $HWNDPARENT 0
  EnableWindow $R1 0

代わりに、アンインストーラーの[閉じる]ボタンを無効にし続けます。このセクションはまだインストーラーにあると思いました...

4

3 に答える 3

1

メインウィンドウがまだ作成されていないため、ユーザーがクリックできるUIが.onInitによってどのように表示されるかわかりませんが、コードを別の場所に移動した場合は、HideWindow+を使用してインストーラーを非表示/表示できますBringToFront(基本的に)または、ユーザーに+でクリックさせたくないボタンを無効にします。ShowWindow $HWNDPARENT 0|1GetDlgItemEnableWindow

于 2012-07-31T01:17:32.077 に答える
1

リンクしたコードスニペットに基づいて、心配する必要はないと思います。

.onInit関数は、インストーラーUIが画面に描画される前に実行されるため、ユーザーがインストーラーを操作する前にアンインストーラーが実行されます。

そのコードが何をしているのかを正しく理解していることを確認するために、新しいインストーラーを実行すると、レジストリで古いバージョンのアンインストーラー実行可能ファイルの場所が検索され、メッセージボックスが表示されます。以前のバージョンをアンインストールします。[OK]をクリックすると、ExecWait命令を使用してアンインストーラーが実行され、アンインストーラーが戻る(終了する)まで次の命令が実行されなくなります。ユーザーが[キャンセル]をクリックすると、古いバージョンのアンインストールがスキップされます。

これらはすべて.onInit関数で行われるため、ユーザーは古いバージョンがアンインストールされる前に新しいバージョンを操作する機会がありません。

古いバージョンをアンインストールする前に新しいバージョンをインストールできる唯一の方法は、メッセージボックスが表示されたときに[キャンセル]をクリックすることです。このオプションを削除したい場合は、MessageBoxコードも変更できます。

MessageBox MB_OK|MB_ICONEXCLAMATION \
      "${PROGRAM_NAME} is already installed. $\n$\nClick `OK` to remove the \
       previous version"

また、MessageBox命令に続く行IDOK uninstと行を削除する必要があります。Abort

お役に立てれば。

スクリプトの基本形式は次のとおりです。

Function .onInit
    code you linked to goes here
FunctionEnd

Section "Install"
    install stuff goes here
SectionEnd

Section "Uninstall"
    Uninstall stuff goes here
SectionEnd   
于 2012-07-31T14:00:41.627 に答える
0

次のようにUninstallerを呼び出します。
ExecWait'"$ INSTDIR \ Uninstall.exe" _?= $ INSTDIR'
次に、BringToFront
を使用します 。アンインストーラーが存在するまでインストーラーを非表示にします。

于 2019-01-31T06:05:12.653 に答える