3つの異なる環境(QA、UAT、PROD)のNSISスクリプトを使用してインストーラとアップデータを作成しました。インストーラは3つの環境すべてで異なりますが、アップデータは同じです。私の古いインストーラでは、アンインストーラは定義されておらず、新しくアップデートされたインストーラはアンインストーラコードを持っています。 これで、以前にcozをインストールしたすべての環境でアンインストーラを作成し、新しいインストーラを実行したくないような方法で、アップデータを変更したいと考えています。私は今更新されているだけで走っています。私はアンインストーラのコードを 'Section-post'に 'WriteUninstaller'を使って書いています。以下のコードを見てください。このコードは、コントロールパネルのプログラムリスト(SSCM)に3つのエントリを追加します。今、私は「QAまたはUATまたはPRODのアンインストーラがコントロールパネルからユーザーによってクリックされたかどうかをチェックしたい私の「セクションUnInstall」で問題に直面しています。アンインストールセクションのNSISスクリプトで条件付きでコンポーネントをアンインストールしたい
ユーザーはどの環境をクリックするのですか? NSISスクリプトで可能ですか?
マイコード:
!define PRODUCT_NAME "Updater name"
!define PRODUCT_NAME_QA "QA Name"
!define PRODUCT_NAME_UAT "UAT Name"
!define PRODUCT_NAME_PROD "PROD Name"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\App.exe"
!define PRODUCT_UNINST_KEY_QA "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME_QA}"
!define PRODUCT_UNINST_KEY_UAT "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME_UAT}"
!define PRODUCT_UNINST_KEY_PROD "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME_PROD}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
Section -Post
IfFileExists "$PROGRAMFILES\App Path\QA\app.exe" QAExists PastQACheck
QAExists:
WriteUninstaller "$PROGRAMFILES\App Path\QA\App Uninstall.exe"
WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$PROGRAMFILES\App Path\QA\App.exe"
WriteRegStr HKLM "${PRODUCT_UNINST_KEY_QA}" \
"DisplayName" "App (QA)"
WriteRegStr HKLM "${PRODUCT_UNINST_KEY_QA}" \
"UninstallString" "$\"$PROGRAMFILES\App Path\QA\App Uninstall.exe$\""
PastQACheck:
IfFileExists "$PROGRAMFILES\App Path\UAT\app.exe" UATExists PastUATCheck
UATExists:
WriteUninstaller "$PROGRAMFILES\App Path\UAT\App Uninstall.exe"
WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$PROGRAMFILES\App Path\UAT\App.exe"
WriteRegStr HKLM "${PRODUCT_UNINST_KEY_UAT}" \
"DisplayName" "App (UAT)"
WriteRegStr HKLM "${PRODUCT_UNINST_KEY_UAT}" \
"UninstallString" "$\"$PROGRAMFILES\App Path\UAT\App Uninstall.exe$\""
PastUATCheck:
IfFileExists "$PROGRAMFILES\App Path\PROD\app.exe" PRODExists PastPRODCheck
PRODExists:
WriteUninstaller "$PROGRAMFILES\App Path\PROD\App Uninstall.exe"
WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$PROGRAMFILES\App Path\PROD\App.exe"
WriteRegStr HKLM "${PRODUCT_UNINST_KEY_PROD}" \
"DisplayName" "App (PROD)"
WriteRegStr HKLM "${PRODUCT_UNINST_KEY_PROD}" \
"UninstallString" "$\"$PROGRAMFILES\App Path\PROD\App Uninstall.exe$\""
PastQACheck:
SectionEnd
Section Uninstall
SetShellVarContext all
;Check if uninstallation called for QA
;Condition to check if user has clicked QA uninstallation
QAExists:
delete "$PROGRAMFILES\App Path\QA\"
delete "$DESKTOP\QA.lnk"
RMDIR "$PROGRAMFILES\App Path\QA\"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY_QA}"
DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
PastQACheck:
;Check if uninstallation called for UAT
;Condition to check if user has clicked UAT uninstallation
UATExists:
delete "$PROGRAMFILES\App Path\UAT\"
delete "$DESKTOP\UAT.lnk"
RMDIR "$PROGRAMFILES\App Path\UAT\"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY_UAT}"
DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
PastUATCheck:
;Check if uninstallation called for PROD
;Condition to check if user has clicked PROD uninstallation
PRODExists:
delete "$PROGRAMFILES\App Path\PROD\"
delete "$DESKTOP\PROD.lnk"
RMDIR "$PROGRAMFILES\App Path\PROD\"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY_PROD}"
DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
PastPRODCheck:
SetAutoClose true
SectionEnd
アンインストールのための環境を確認するために書くためにどのような条件?