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 应用程序中完美地工作...
我已经使用 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 应用程序中完美地工作...