Wix 在安装并启动应用程序后,应用程序并不总是能达到最高水平
我们有一个基于WIX构建的MSI的安装系统。引导程序是NSIS。事情就是这样发展的。现在一切正常,只是有一个小故障 有两个NSIS安装程序。一个用于新用户。按照惯例运行MSI,这样就可以同意他们的合同屏幕。应用程序检查更新,用户可以这样做。这是第二个NSIS包:Wix 在安装并启动应用程序后,应用程序并不总是能达到最高水平,wix,windows-installer,nsis,Wix,Windows Installer,Nsis,我们有一个基于WIX构建的MSI的安装系统。引导程序是NSIS。事情就是这样发展的。现在一切正常,只是有一个小故障 有两个NSIS安装程序。一个用于新用户。按照惯例运行MSI,这样就可以同意他们的合同屏幕。应用程序检查更新,用户可以这样做。这是第二个NSIS包: Section -RA_unzip InitPluginsDir ReadRegStr $R1 HKCU "Software\Company\AppFolder\Property" "Use
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' $0
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版本的情况下运行它(它只是在没有安装的情况下退出),那么应用程序窗口将始终位于顶部
我甚至添加了BringWindowToTop(*GetMainWnd())当主窗口建立并运行良好时,初始化结束时的代码>。我确实认为这与windows安装程序离开缓慢有关,这就是为什么Sleep 1000
。这没什么区别
唯一可以确定的是,windows installer实际执行安装时会发生这种情况。在Exec
之后直接调用Quit
不是一个好主意,因为如果安装程序在子进程显示其窗口之前退出,则设置前景窗口的权利将丢失
你可以试试
ExecShell /WAITFORINPUTIDLE "" "$R0\ars.exe"
Sleep 1000
Quit
如果你知道如何编写Windows软件,你可以尝试创建一个应用程序,在循环中调用GetForeGroundIndow来跟踪活动窗口。嗨@Anders,所以我启动了一个控制台应用程序,它每10毫秒将前台窗口的句柄和窗口名记录到一个文本文件中。事实证明,我们的窗户从来没有到顶部。控制台也被NSIS:Exec调用。控制台窗口保持在顶部。我在文档中找不到任何东西可以改变NSIS:Exec的行为。这对我来说太奇怪了。嗨,安德斯,谢谢。所以我有一个NSIS会话,它只启动记录器,然后是记事本,然后是我的应用程序。我的应用程序中有一半的尝试都是成功的。另一半,在记事本下面。在最近5次测试中,我的应用程序在记事本和控制台窗口下排名前4位。不要从安装程序中执行诊断应用程序,先启动它,不要让它成为活动窗口。我会尝试!谢谢,我很满意。我只是连续运行了30次,每次我的应用程序都在顶部。它与一个平面执行器一起工作。它可能与普通执行器一起工作,但是带有WaitForInputId的ExecShell更好,它会等到孩子开始处理消息。好的,我会这样做。任何减少故障的方法。非常感谢你的帮助。