安装并启动应用程序后,应用程序并不总是排在最前面

Application does not alway come to top after an install and start app

我们有一个基于 WIX 构建的 MSI 的安装程序系统。引导程序是 NSIS。事情就是这样。现在一切正常,除了一个小故障。

有两个 NSIS 安装程序。一个给新用户。 运行 是 MSI 的惯例,因此他们可以同意合同屏幕。该应用程序检查更新,用户可以这样做。这是第二个 NSIS 包:

Section -RA_unzip
    InitPluginsDir
    ReadRegStr $R1 HKCU "Software\Company\AppFolder\Property" "User Directory"
    SetOutPath $R1
    File "f:\cpp\AppName\deployment\AppName.msi"
    ExecWait 'msiexec /i "$R1\AppName.msi" /L* msi.log /passive /norestart' [=10=]
SectionEnd
      
Section -r_name_dlls
    ReadRegStr $R0 HKCU "Software\Company\AppFolder\Property" "Program Directory"
    Rename $R0\libssl_3.dll $R0\libssl-3.dll
    Rename $R0\libcrypto_3.dll $R0\libcrypto-3.dll
SectionEnd

Section -Finishing Up
    Sleep 1000
SectionEnd

Section -restartRA
    ReadRegStr $R0 HKCU "Software\Company\AppFolder\Property" "Program Directory"
    Exec $R0\ars.exe
    Quit
SectionEnd

应用程序出现在 Z 顺序顶部的时间不到一半。有时它最终会在底部!这发生在我的 Windows7 和我妻子的 Windows10 上。如果我 运行 这没有影响 MSI 版本,(它只是在没有安装的情况下退出),那么应用程序 window 将始终排在最前面。

我什至在初始化结束时添加了 BringWindowToTop(*GetMainWnd()); 当主要 window 已经建立并且 运行ning 时。我确实认为这与 windows 安装程序离开缓慢有关,这就是 Sleep 1000 的原因。没有区别。

唯一可以肯定的是 windows 安装程序实际进行安装时会发生这种情况。

Exec 之后直接调用 Quit 不是一个好主意,因为如果安装程序在子进程显示其 window 设置前台的权限之前退出 window丢了。

你可以试试

ExecShell /WAITFORINPUTIDLE "" "$R0\ars.exe"
Sleep 1000
Quit