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

NSIS - printing to prompt during command line uninstall

我已经使用 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 [=10=] "hello" 

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

对于这种情况,安装程序和卸载程序之间有区别吗?

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

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

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