为什么Install4j在卸载后需要在下次安装时重新启动?

为什么Install4j在卸载后需要在下次安装时重新启动?,install4j,Install4j,我有两个使用install4j构建的windows安装程序,我执行以下步骤: 安装版本X 卸载版本X 安装版本x+1 结果显示以下消息:以前程序的安装/删除未完成。您需要重新启动计算机才能完成安装。 我知道出现此消息的原因是卸载步骤添加注册表项HKEY\U CURRENT\U USER\SOFTWARE\ej technologies\install4j\RebootCheckFile 问题是为什么卸载步骤会添加此注册表项?最可能的原因是无法删除文件,因为正在运行的可执行文件仍在使用该文件 当卸

我有两个使用install4j构建的windows安装程序,我执行以下步骤:

  • 安装版本X
  • 卸载版本X
  • 安装版本x+1
  • 结果显示以下消息:以前程序的安装/删除未完成。您需要重新启动计算机才能完成安装。

    我知道出现此消息的原因是卸载步骤添加注册表项HKEY\U CURRENT\U USER\SOFTWARE\ej technologies\install4j\RebootCheckFile


    问题是为什么卸载步骤会添加此注册表项?

    最可能的原因是无法删除文件,因为正在运行的可执行文件仍在使用该文件

    当卸载程序最后仍然打开时,在%TEMP%目录中搜索日志文件(名称以“i4jlog”开头的文件),并检查“卸载文件操作”的输出


    或者,安装程序可能无法覆盖文件,因为该文件正在使用中。检查安装程序的日志文件是否出现“延迟安装”

    您可以通过传递VM参数来禁止重新启动

    -Dinstall4j.suppressReboot=true
    

    安装程序。您可以在安装程序的“VM arguments”属性中将其设置为固定的VM参数。

    谢谢,我检查了日志,发现了如下行:推迟删除C:\Program Files\Myserver\.install4j\i4jruntime.jar,但当我查看文件系统时,找不到任何一行(好像它们实际上已被删除)。知道是什么原因导致它“推迟删除”吗?如果它们被删除了,为什么仍然需要重新启动?我会先用procexp检查哪些可执行文件仍然锁定在“i4jruntime.jar”上:我试图用procexp检查…似乎唯一的过程是uninstall.exe(由install4j生成)。此外,我们在卸载过程结束时有Finish屏幕。我注意到重新启动行为的要求取决于我关闭此屏幕的速度。我做得越快,就越有可能需要重新启动(在静默模式下,它总是需要重新启动)。这让我觉得这是某种比赛状态