2012-10-25 40 views
0

我不知道如何把这个放在这里,我会尽我所能。请帮我解决卸载程序在安装程序退出后仍在运行

我有一个补丁安装程序,它按照预期安装和卸载。但从程序文件中卸载补丁后,我试着卸载其他软件。我收到了一条弹出消息,告知卸载完成后卸载。

所有我想到的是在卸载我的补丁的结尾,我通过执行.exe文件启动一个进程。我的卸载程序等待该进程退出,我不想退出。

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

我试着Exec,ExecDos和ExecCmd与/ ASYNC,但我仍然看到相同的问题。

尝试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退出。

回答

1

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

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

如果你不使用高级选项,不需要再输入标准输入你并不真正需要使用第三方插件:

如果teven是一个控制台应用程序,你要隐藏控制台窗口(和等待):

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

否则:

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

如果你真的不想等待,你可以使用Exec但Windows可能会迫使等待anywa y卸载时...

+0

Ohoo !!我不知道如果从“添加/删除”中卸载,窗口强制等待。有什么办法可以独立启动一个进程而不是子进程,以便添加/删除认为卸载已完成 – Vivek

+1

不,不是真的,它是通过设计修复一些旧的(InstallShield?)卸载程序。有http://nsis.sourceforge.net/Escape_ARP_Job_With_New_Process,但我不知道它是否适用于每个版本的Windows ... – Anders