【问题标题】:Uninstall is still running after installer exits安装程序退出后卸载仍在运行
【发布时间】:2012-10-25 18:11:49
【问题描述】:

我不知道如何把它放在这里,我会尽力而为。请帮帮我

我有一个补丁安装程序,可以按预期安装和卸载。但是从程序文件中卸载补丁后,我尝试卸载其他软件。所有我收到一条弹出消息,说让卸载完成卸载。

我只知道在卸载补丁结束时,我正在通过执行 .exe 文件来启动一个进程。我的卸载程序等待该进程退出,我不想退出。

我的其他选择是在卸载补丁后强制用户重新启动,我不希望这样做。

我用 /ASYNC 尝试了 Exec、ExecDos 和 ExecCmd,但我仍然看到同样的问题。

试试 1

ExecShell open "$INSTDIR\system\teven.exe" 

试试 2

ExecDos::exec /NOUNLOAD /ASYNC "$INSTDIR\system\teven.exe" ""
Pop $0
ExecDos::isdone /NOUNLOAD $0

谁能帮我解决这个问题。如何启动 teven.exe 并让它继续运行并让我的卸载程序不等待 teven.exe 退出。

【问题讨论】:

    标签: nsis


    【解决方案1】:

    如果您要在卸载程序完成后执行其他操作,您几乎必须强制卸载程序等待。当您从添加/删除程序卸载时,Windows 甚至会强制等待卸载程序启动的所有子进程...

    如果您想等待,为什么要使用 /ASYNC? (编辑:我猜你不想等待?)ExecDos::isdone 不等待,它只是检查,如果你想等待,请使用 ExecDos::wait

    如果您没有使用高级选项并且不需要标准输入,那么您实际上不需要使用 3rd-party 插件:

    如果 teven 是一个控制台应用程序并且您想隐藏控制台窗口(并等待):

    nsExec::Exec '"$INSTDIR\system\teven.exe"'
    

    否则:

    ExecWait '"$INSTDIR\system\teven.exe"'
    

    如果您真的不想等待,您可以使用Exec,但 Windows 可能会在卸载时强制等待...

    【讨论】:

    • 哦!我不知道如果从添加/删除中卸载,窗口会强制等待。有什么方法可以将一个进程单独启动为子进程,以便添加/删除认为卸载完成
    • 不,不是,它是设计来修复一些旧的(InstallShield?)卸载程序。有nsis.sourceforge.net/Escape_ARP_Job_With_New_Process,但我不知道它是否适用于每个版本的 Windows...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 2016-04-10
    • 2011-11-21
    相关资源
    最近更新 更多