障害のある通知領域 (トレイ) アプリをデプロイしました。最上位のウィンドウがなかったため、WM_CLOSE イベントを受け取りませんでした。つまり、アップグレードまたはアンインストール中に Windows インストーラーが組み込み関数を使用してそれを閉じようとすると (アプリをシャットダウンするダイアログが表示されます)、アプリを閉じることができません。トレイ プロセスはまだ Taskmanager で実行されているため、exe ファイルはロックされています。
私は次のことを望みます:
セットアップは、実行中のトレイ アプリケーションを特定のファイル/インストール バージョンまで強制終了する必要があります。または、これが不可能な場合は、古いバージョンのインストールを防止し、手動で削除するようユーザーに伝えます。
「シャットダウンしてください」ダイアログが表示される前に、古いバージョンのメモ帳を (テストとして) 起動しようとしましたが、成功しませんでした。
Before="ValidateInstall" で起動しようとしましたが、実行されませんでした。After="ValidateInstall" で起動しようとした後、メモ帳を開きましたが、セットアップがファイルの実行を検出した後に実行しました。
おそらく、すべてのプロパティが Before="ValidateInstall" に設定されているわけではありませんか?
おそらく私のカスタム アクションは何らかの形で自動的に延期されますか?
いくつかのコード スニペット:
<Product Id="*"
Codepage="65001"
Language="!(loc.LANGUAGE)"
Manufacturer="$(var.AppManufacturer)"
Name="$(var.AppCode), $(var.AppVersion)"
UpgradeCode="$(var.AppUpgradeCode)"
Version="$(var.AppVersion)">
<Package Comments="$(var.AppCode),
$(var.AppVersion)"
Compressed="yes"
InstallPrivileges="limited"
InstallScope="perUser"
InstallerVersion="301"
Languages="!(loc.LANGUAGE)"
Manufacturer="$(var.AppManufacturer)"
Platform="x86"
SummaryCodepage="1252"/>
<Property Id="PROP_APP_IGNORES_SHUTDOWN">
<DirectorySearch Id="DirSrch_PIAS_Version" Path="[DIR_ID_USERPROGRAMFOLDER]">
<FileSearch Name="$(var.MyExe.TargetFileName)"
MaxVersion="6.1.3432.99999"/>
</DirectorySearch>
</Property>
<Property Id="QtExecCmdLine"
Value='"$(var.SysSystem32)\taskkill.exe" /F /IM $(var.MyExe.TargetFileName)'/>
<CustomAction Id="CA_KillApp"
BinaryKey="WixCA"
DllEntry="CAQuietExec"
Execute="immediate"
Impersonate="yes"
Return="ignore" />
<Property Id='NOTEPAD'>$(var.SysWindir)\Notepad.exe</Property>
<CustomAction Id="CA_OpenNotepad"
Property="NOTEPAD"
ExeCommand=""
Return="asyncNoWait" />
<MajorUpgrade Schedule="afterInstallValidate"
DowngradeErrorMessage="[VSDVERSIONMSG]"
AllowDowngrades="no"
AllowSameVersionUpgrades="yes" />
<InstallExecuteSequence>
<Custom Action="CA_OpenNotepad" Before="CA_KillApp">PROP_APP_IGNORES_SHUTDOWN</Custom>
<Custom Action="CA_KillApp" Before="InstallValidate">PROP_APP_IGNORES_SHUTDOWN</Custom>
</InstallExecuteSequence>
</Product>