NSIS - 在命令行卸载期间打印以提示

时间:2015-02-26 15:42:46

标签: command-line-arguments nsis uninstaller

我已经使用NSIS为Windows编写了一个安装程序。 如果从控制台运行程序,我想将一些信息写入此控制台。

我的代码看起来像这个问题中的那个...

NSIS - printing to prompt during command line install

System::Call 'kernel32::GetStdHandle(i -11)i.r0' 
System::Call 'kernel32::AttachConsole(i -1)i.r1' 
FileWrite $0 "hello" 

安装程序没有问题。但是,如果我运行卸载程序,则没有输出,$ 1 == 0。

对于这种情况,安装程序和卸载程序之间是否存在差异?

1 个答案:

答案 0 :(得分:1)

卸载程序将从%Temp%运行自身的副本,除非您使用特殊的_?=$Instdir参数启动它。 (这样做Delete "$Instdir\uninstall.exe"有效)

这意味着第二个卸载程序实例中的AttachConsole(ATTACH_PARENT_PROCESS)将尝试附加到没有控制台的父进程。父级没有控制台,因为NSIS卸载程序是一个GUI应用程序而且那些没有自动获得控制台而且_?=处理发生在.onInit之前所以 hack 附加到一个永远不会发生

我认为没有办法解决这个问题而不使用_?=。使用AttachConsole是一种破解,在GUI应用程序中永远不会完美运行......