Inno setup 如何使用inno创建安装程序的一个实例,并且仍然能够使用相同的安装程序实例执行以前版本的卸载?

Inno setup 如何使用inno创建安装程序的一个实例,并且仍然能够使用相同的安装程序实例执行以前版本的卸载?,inno-setup,Inno Setup,我正在使用inno安装脚本。我正在努力完成下一步: 只允许安装程序的一个实例 如果检测到以前的版本,请允许并执行以前版本的卸载-使用用户启动的第一个安装程序执行此操作。 我尝试过使用appMutex,这确实阻止了不止一个安装实例,但由于我有检测我的应用程序的早期版本的代码,当检测到以前的版本时,inno会询问我是否要删除以前的版本,当我尝试删除以前的版本时(由于互斥),我会收到一条消息,说明以前的实例已经在运行,并关闭以前的实例 现在,如果我删除mutext,我可以卸载以前的版本,但可以启动同一

我正在使用inno安装脚本。我正在努力完成下一步:

只允许安装程序的一个实例 如果检测到以前的版本,请允许并执行以前版本的卸载-使用用户启动的第一个安装程序执行此操作。 我尝试过使用appMutex,这确实阻止了不止一个安装实例,但由于我有检测我的应用程序的早期版本的代码,当检测到以前的版本时,inno会询问我是否要删除以前的版本,当我尝试删除以前的版本时(由于互斥),我会收到一条消息,说明以前的实例已经在运行,并关闭以前的实例

现在,如果我删除mutext,我可以卸载以前的版本,但可以启动同一设置的多个实例,这是我不想要的

我还尝试了以下链接: 但由于某些原因,它不起作用

还试过这个: 但是我得到了一个错误:无法导入dll

这可能是我想要实现的吗

如果是,有人能帮我解决吗


谢谢你帮我做这个

我不太确定你的第二个要求。允许并执行以前版本的卸载是什么意思?使用用户启动的第一个安装程序执行此操作?如果您将满足第一个要求,并且不允许启动另一个安装实例,那么安装自然只能由第一个也是唯一的实例运行。或者我遗漏了什么?你是对的,但问题是当卸载开始时,它被算作安装程序的第二个实例,这就是为什么我不能继续卸载以前的版本。对不起,但我仍然不明白。现在,我可以告诉你,这些文章中的代码编写得不好,现在你不需要使用windowsapi来实现这一点。Inno Setup提供了两个必要的互斥函数。这是我将要发布的答案,但我对第二个要求有点迷茫。有人告诉我,当同一安装程序的另一个安装程序或卸载程序实例正在运行时,您想阻止运行安装程序,但我不确定。它仍然是一样的。我无法从为安装而启动的安装程序的第一个实例中卸载以前的版本。我收到消息卸载检测到应用程序当前正在运行。请立即关闭它的所有实例,然后单击“确定”,或单击“取消”退出。并且应用程序未运行,不知何故,安装程序被识别为已在运行的实例,并且开始卸载似乎被视为第二个实例。该消息将在应用程序运行时显示。存在AppMutex互斥体时正在运行—应用程序创建的互斥体,与安装实例无关。我显然没有抓住这个问题的重点。我认为您希望防止在第一点只允许一个安装实例的同时运行多个安装实例。对不起,我已经把你的问题读了6遍了,但是我不知道你想做什么。