NSIS - 在命令行安装期间打印提示

2024-05-06

我正在使用 NSIS 为 Windows 制作安装程序,并且有许多用户可以使用命令行指定的自定义安装选项,例如:

installer.exe /IDPATH=c:\Program Files\Adobe\Adobe InDesign CS5 /S

我想做的就是向安装人员展示这些选项。我可以很容易地解析 /?或带有 ${GetParameters} 和 ${GetOptions} 的 /help 参数,但如何实际打印到命令提示符?


NSIS 是一个 GUI 程序,并不真正具有写入 stdout 的能力。

在 XP 及更高版本上,您可以使用系统插件执行此操作:

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

Edit:如果父进程还没有一个控制台,您可以打开一个新控制台

!include LogicLib.nsh
System::Call 'kernel32::GetStdHandle(i -11)i.r0' 
System::Call 'kernel32::AttachConsole(i -1)i.r1' 
${If} $0 = 0
${OrIf} $1 = 0
 System::Call 'kernel32::AllocConsole()'
 System::Call 'kernel32::GetStdHandle(i -11)i.r0' 
${EndIf}
FileWrite $0 "hello$\n" 

但就/而言,它实际上没有任何意义?处理去,你不妨在没有控制台的时候打开一个消息框

!include LogicLib.nsh
StrCpy $9 "USAGE: Hello world!!" ;the message
System::Call 'kernel32::GetStdHandle(i -11)i.r0' ;try to get stdout
System::Call 'kernel32::AttachConsole(i -1)i.r1' ;attach to parent console
${If} $0 <> 0
${AndIf} $1 <> 0
 FileWrite $0 "$9$\n" 
${Else}
 MessageBox mb_iconinformation $9
${EndIf}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSIS - 在命令行安装期间打印提示 的相关文章

  • int argc, char *argv[] 是什么意思?

    在许多 C IDE 和编译器中 当它为您生成 main 函数时 它看起来像这样 int main int argc char argv 当我在没有 IDE 的情况下仅使用命令行编译器编写 C 代码时 我输入 int main 没有任何参数
  • 如何读取和处理(解析)命令行参数?

    在Python中 我们如何找到为脚本提供的命令行参数并处理它们 Related background reading What does sys argv 1 mean What is sys argv and where does it
  • PyQt 的优雅命令行参数解析

    我正在编写一个新的 PyQt 应用程序 我正在尝试使用尽可能多的 PyQt API 来完成与程序和 ui 相关的所有事情 作为提高我对 PyQt 和 Qt 总体知识的一种手段 我的问题是 PyQt Qt 中是否有 API 可以优雅地处理命令
  • 以编程方式启动时 Appium 不会初始化驱动程序

    我正在使用 Java 和 Selenium 通过命令行初始化 Appium 以便在 Android chrome 浏览器上运行测试 然而 该过程运行无限时间 并且代码来自 DesiredCapabilities 该行没有被执行 代码 Pro
  • 命令行参数、带有空格的路径、解析错误

    我遇到的问题与此处概述的问题几乎相同 控制台应用程序无法正确解析带有空格的参数 https stackoverflow com questions 10548777 console app not parsing correctly arg
  • 将空字符串作为参数传递给 boost::program_options 的最佳方法是什么?

    我有一个程序使用升压 程序选项解析命令行 其中一个参数是 AMQP 交换的名称 并提供默认值 出于测试目的 我想用空字符串覆盖此 AMQP 交换名称 以使用默认交换 我不知道如何将空字符串传递给升压 程序选项 那可能吗 不修改源码 如果没有
  • 如何对命令行参数进行单元测试?

    我正在尝试向 Python 提供命令行参数unittest并面临一些问题 我在互联网上搜索并找到了一种提供参数的方法 unittest main argv myArg 问题是这对于单个命令行参数工作正常 但对于多个参数则失败 unittes
  • Haskell:解析命令行参数

    这更多的是一个风格问题 而不是一个如何做的问题 所以我有一个需要两个命令行参数的程序 一个字符串和一个整数 我是这样实现的 main do args aString aInteger lt getArgs let parsed n read
  • 如何将强制和可选命令行参数传递给 perl 脚本?

    我正在使用 Getopt Long 将选项传递给我的 Perl 脚本 但我想做这样的事情 perl myScript mandatoryArgument1 optionalArgument1 someValue 我希望脚本在缺少 Comma
  • 有没有办法提前测试Windows exe是否会因为缺少dll而无法加载?

    如果您尝试在没有任何更新的情况下在 Windows 8 1 上安装 vs2015 Redistributable 它将安装失败 但它会在安装过程中进行足够多的操作 guid 位于注册表中 因此 如果您运行一个程序来检查注册表中是否存在可再发
  • 如何在 Visual Studio 中传递多个命令参数?

    我正在使用 LZMA SDK 开发一个压缩 解压缩项目 主程序包含一些我必须用来运行应用程序的参数 要从命令行运行它 我使用 LzmaUtil exe e input elf output elf 我正在使用 VS 2013 所以我添加了e
  • 通过 Bash 传递命令行参数

    在温习 bash 时 已经有一段时间了 我惊讶地发现执行这段代码 另存为 script sh echo Arg 0 to script sh 0 echo Arg 1 to script sh 1 function echo args ec
  • 为什么我需要“sys.argv”来在 PyQt 中启动 QApplication?

    我尝试了解 PyQt 的作用 我首先没有做的事情之一是 QApplication sys argv 为什么我必须给 QApplication 这个参数 我知道什么sys argv做 但在我的脚本中我不需要它 这调用了C 类的构造函数QApp
  • 获取字符串形式的命令行参数

    我想将所有命令行参数打印为单个字符串 我如何调用脚本以及我期望打印的内容的示例 RunT py mytst tst c qwerty c mytst tst c qwerty c 执行此操作的代码 args str sys argv 1 a
  • NSIS - 静默自动更新应用程序

    我有一个适用于我的 net c 应用程序的 NSIS 安装工具包 考虑到我已经将新的更新 新的 NSIS 应用程序版本 下载到本地计算机 有没有办法静默自动更新我的应用程序 谢谢 如果您需要检测命令行 Autoupdate yes incl
  • 用于解析包含逗号分隔值的命令行输入的批处理文件

    我正在开发一个命令行实用程序 它将一组输入参数作为命令 然后根据预定义名称验证这些输入参数 该实用程序以这种方式调用 运行实用程序 cmd A B x y z C w 这里的参数是 A B 和 C 以 开头的参数 现在验证规则如下 参数的名
  • 如何在 Powershell 中执行相当于 $PROGPATH/program 的 bash 操作?

    在 GNU Linux 中我会这样做 PROGPATH long and complicated path to some bin PROGPATH program args 但在 Powershell 中如果我尝试这样做 PROGPATH
  • 在多个自定义模块支持的多个脚本中使用 python 的 argparse

    我正在构建一组用于管理我们的基础设施的脚本和模块 为了让事情井井有条 我想整合尽可能多的努力 并尽量减少新脚本的样板代码 特别是这里的问题是整合 ArgumentParser 模块 一个示例结构是让脚本和库组织如下 bin script1
  • 通过 ant 构建脚本将命令行参数传递给 Java

    运行以下命令时 ant targetname Dk1 v1 Dk2 v2 我想要将命令行参数传递给java like java whatever Dk1 v1 Dk2 v2 我需要从 Java 代码访问这些参数System getPrope
  • 如何替换带引号的多单词字符串作为参数?

    我正在尝试替换包含多个带引号的单词的字符串变量作为命令的参数 因此 给出以下示例脚本 请注意 shebang 中的 x 这会导致输出被记录到 stderr bin bash x myArg hello world echo string i

随机推荐