我们有一个安装程序,需要在安装时重新启动,但在卸载时也会重新启动。有什么方法可以防止卸载时重新启动吗?
这是我们目前所拥有的:
<InstallExecuteSequence>
<ScheduleReboot After="InstallFinalize"/>
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)
提前谢谢了!
要求在安装时检测Windows 10或更高版本。为此,我创建了以下功能。
它在Windows 10和Windows 8.1中给我603(AS VersionNT值)。那是错的。
还有其他方法可以做到这一点吗?
function BOOL isWindows10OrGreater()
STRING svWindowsValue;
NUMBER nWindowsValue;
NUMBER nBuffer;
begin
try
nBuffer = 256;
MsiGetProperty(ISMSI_HANDLE,"VersionNT",svWindowsValue,nBuffer);
StrToNum(nWindowsValue,svWindowsValue);
return (nWindowsValue >= 603);
catch
return FALSE;
endcatch;
end;
Run Code Online (Sandbox Code Playgroud) 卸载我的应用程序时,如果它正在运行,它会尝试停止它:
遗憾的是,自动关闭并不真正起作用,它显示以下错误:
我的应用程序消失了,窗户,托盘栏图标,它们都消失了.但我仍然可以在流程列表中看到它们.
我猜测Windows向应用程序发送信号以便正常退出并且UI会这样做,但是有一些挥之不去的线程阻止进程终止.
Windows Installer如何在卸载期间关闭应用程序?
一旦我知道这一点,我想在调试我的应用程序时模拟它,看看发生了什么.这是一个合理的计划吗?
windows windows-installer restartmanager windows-restart-manager
经过一番谷歌搜索后,我想出了一个配置,该配置应该允许我仅安装包的较新版本(它确实如此),同时替换旧的、已安装的版本(它没有)
我的wxs文件如下:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*"
Name="Gdml File Viewer" Language="1033"
UpgradeCode="5fb07c15-32a5-4b8a-9794-e4425bfc2eea"
...>
<Package InstallerVersion="200"
Compressed="yes"
InstallScope="perMachine" Platform="x64" />
<MajorUpgrade Schedule="afterInstallValidate"
DowngradeErrorMessage="A later version of [ProductName] is already installed"
AllowSameVersionUpgrades="no"
AllowDowngrades="no" />
...
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,它确实允许我安装较新的版本,但旧版本未卸载。它仍然显示在“应用程序和功能”列表中:

(另一个实例的版本为2019.14.181.35181)