Inno setup Inno安装程序:仅运行卸载脚本一次

Inno setup Inno安装程序:仅运行卸载脚本一次,inno-setup,uninstallation,Inno Setup,Uninstallation,我正在为我们的WinDRBD驱动程序使用Inno设置,它是Linbit的DRBD驱动程序从Linux到Windows()的一个端口。我们 正在使用Inno安装程序进行安装/卸载,效果非常好 我注意到的一点是,如果用户两次安装同一版本(或升级到较新版本),则在用户选择卸载程序时,UninstallRun部分中的脚本会多次运行(每次安装一次)。是否有办法使其仅运行一次,即使用户安装了多个升级 我目前使用的是: [UninstallRun] Filename: "C:\Windows\sysnativ

我正在为我们的WinDRBD驱动程序使用Inno设置,它是Linbit的DRBD驱动程序从Linux到Windows()的一个端口。我们 正在使用Inno安装程序进行安装/卸载,效果非常好

我注意到的一点是,如果用户两次安装同一版本(或升级到较新版本),则在用户选择卸载程序时,
UninstallRun
部分中的脚本会多次运行(每次安装一次)。是否有办法使其仅运行一次,即使用户安装了多个升级

我目前使用的是:

[UninstallRun]
Filename: "C:\Windows\sysnative\cmd.exe"; Parameters: "/c uninstall-windrbd.cmd"; \
    WorkingDir: "{app}"; Flags: runascurrentuser waituntilterminated shellexec
(注意:
sysnative
这是因为Inno安装程序是32位的,而应用程序是64位的,否则在脚本中安装INF会做错误的事情)

这只是一件小事,我们正在运行一个INF文件卸载 在第二次以上运行时显示一个消息框。可能我缺少一些标志?

将RunOnceId:“Uninstall”(其中“Uninstall”只是一个随机标记,您也可以使用foobar)添加到卸载行就可以了

所以


即使安装了升级,卸载程序也只能运行一次。

请注意,您不应该硬编码
C:\Windows\sysnative
。正确的解决方案是使用
标志:64位
(并删除
shellexec
)-
文件名:“uninstall windrbd.cmd”;WorkingDir:{app}”;标志:runascurrentuser 64位WaitUnFilterminated
[UninstallRun]
Filename: "MyUninstallProgram.exe"; Flags: runascurrentuser waituntilterminated runhidden; RunOnceId: "Uninstall"