带有很长参数列表的 NSIS Exec 命令被下一行截断
NSIS Exec command with very long parameter list being cut off by the next line
在我的 NSIS 脚本中,我有以下几行(没有将第一行变成代码块,因为它太长而且看起来像第一行一样糟糕):
Exec '"$BINDIR\SubscriberACD.exe" //IS//SubscriberACD --Install="$BINDIR\SubscriberACD.exe" --Description="Subscriber service with Apache Commons Daemon" --Jvm= "$JVMDIR\jvm.dll" --Classpath="$CLASSESDIR\SubscriberACD.jar;$CLASSESDIR\jeromq-0.3.5.jar;$CLASSESDIR\jackson-databind-2.6.3.jar;$CLASSESDIR\jackson-core-2.6.3.jar;$CLASSESDIR\jackson-annotations-2.6.0.jar;$CLASSESDIR\management-core-util-4.1.2.jar;$ CLASSESDIR\management-measurement-4.1.2.jar;$CLASSESDIR\management-measurement-checkpoint-writer-1.0.jar;$CLASSESDIR\jna-4.2.2.jar;$CLASSESDIR\jna-platform-4.2 .2.jar" --StartMode=jvm --StartClass=SubscriberACD.Subscriber --StartMethod=windowsService --StartParams=start --StopMode=jvm --StopClass=SubscriberACD.Subscriber --StopMethod=windowsService --StopParams=stop --LogPath="$INSTDIR\SubscriberACD\logs" --StdOutput=auto --StdError=auto'
Sleep 5000
ExecWait '"sc" config SubscriberACD start=" auto"'
不知何故,当我查看我的 NSIS 日志时,我看到以下内容:
执行:"C:\Program Files (x86)\MyProduct\SubscriberACD\bin\SubscriberACD.exe" //IS//SubscriberACD --Install="C:\Program Files (x86)\MyProduct\SubscriberACD\bin\SubscriberACD.exe" --Description="Subscriber service with Apache Commons Daemon" --Jvm="C:\Program Files (x86)\MyProduct\SubscriberACD\jdk7\jre\bin\server\jvm.dll" -- Classpath="C:\Program Files (x86)\MyProduct\SubscriberACD\classes\SubscriberACD.jar;C:\Program Files (x86)\MyProduct\SubscriberACD\classes\jeromq-0.3.5.jar;C:\Program Files (x86)\MyProduct\SubscriberACD\classes\jackson-databind-2.6.3.jar;C:\Program Files (x86)\MyProduct\SubscriberACD\classes\jackson-core-2.6.3.jar;C:\Program Files (x86)\MyProduct\SubscriberACD\classes\jackson-annotations-2.6.0.jar;C:\Program Files (x86)\MyProduct\SubscriberACD\classes\management-core-util-4.1.2.jar;C:\Program Files (x86)\MyProduct\SubscriberACD\classes\management-measurement-4.1.2.jar;C:\PrograExecute: "sc config SubscriberACD start=auto
注意 NSIS 如何合并这两行并实际上覆盖了第一行的一些内容。关于造成这种情况的原因有什么想法吗? NSIS不喜欢长参数的命令吗?
最初,我使用 ExecWait 作为我的第一个命令。当我看到同样的问题时,我转而使用 Exec,然后添加了一个 Sleep 5000 以睡眠 5 秒,因为我认为这可能是一个时间问题。
我仔细检查了我的引号以确保它们匹配。
NSIS 默认有 1024 个字符的限制。我猜当 $INSTDIR 被扩展时你超过了那个限制。您可以下载 large string build 或执行批处理文件:
Section
InitPluginsDir
FileOpen [=10=] "$PluginsDir\test.cmd" w
FileWrite [=10=] '@echo off$\n'
; Write out example command in pieces:
FileWrite [=10=] '"$sysdir\forfiles.exe"'
FileWrite [=10=] ' /P "$windir" /S'
FileWrite [=10=] ' /M "*shell32*"$\n'
FileClose [=10=]
ExecWait '"$PluginsDir\test.cmd"'
SectionEnd
在我的 NSIS 脚本中,我有以下几行(没有将第一行变成代码块,因为它太长而且看起来像第一行一样糟糕):
Exec '"$BINDIR\SubscriberACD.exe" //IS//SubscriberACD --Install="$BINDIR\SubscriberACD.exe" --Description="Subscriber service with Apache Commons Daemon" --Jvm= "$JVMDIR\jvm.dll" --Classpath="$CLASSESDIR\SubscriberACD.jar;$CLASSESDIR\jeromq-0.3.5.jar;$CLASSESDIR\jackson-databind-2.6.3.jar;$CLASSESDIR\jackson-core-2.6.3.jar;$CLASSESDIR\jackson-annotations-2.6.0.jar;$CLASSESDIR\management-core-util-4.1.2.jar;$ CLASSESDIR\management-measurement-4.1.2.jar;$CLASSESDIR\management-measurement-checkpoint-writer-1.0.jar;$CLASSESDIR\jna-4.2.2.jar;$CLASSESDIR\jna-platform-4.2 .2.jar" --StartMode=jvm --StartClass=SubscriberACD.Subscriber --StartMethod=windowsService --StartParams=start --StopMode=jvm --StopClass=SubscriberACD.Subscriber --StopMethod=windowsService --StopParams=stop --LogPath="$INSTDIR\SubscriberACD\logs" --StdOutput=auto --StdError=auto'
Sleep 5000
ExecWait '"sc" config SubscriberACD start=" auto"'
不知何故,当我查看我的 NSIS 日志时,我看到以下内容:
执行:"C:\Program Files (x86)\MyProduct\SubscriberACD\bin\SubscriberACD.exe" //IS//SubscriberACD --Install="C:\Program Files (x86)\MyProduct\SubscriberACD\bin\SubscriberACD.exe" --Description="Subscriber service with Apache Commons Daemon" --Jvm="C:\Program Files (x86)\MyProduct\SubscriberACD\jdk7\jre\bin\server\jvm.dll" -- Classpath="C:\Program Files (x86)\MyProduct\SubscriberACD\classes\SubscriberACD.jar;C:\Program Files (x86)\MyProduct\SubscriberACD\classes\jeromq-0.3.5.jar;C:\Program Files (x86)\MyProduct\SubscriberACD\classes\jackson-databind-2.6.3.jar;C:\Program Files (x86)\MyProduct\SubscriberACD\classes\jackson-core-2.6.3.jar;C:\Program Files (x86)\MyProduct\SubscriberACD\classes\jackson-annotations-2.6.0.jar;C:\Program Files (x86)\MyProduct\SubscriberACD\classes\management-core-util-4.1.2.jar;C:\Program Files (x86)\MyProduct\SubscriberACD\classes\management-measurement-4.1.2.jar;C:\PrograExecute: "sc config SubscriberACD start=auto
注意 NSIS 如何合并这两行并实际上覆盖了第一行的一些内容。关于造成这种情况的原因有什么想法吗? NSIS不喜欢长参数的命令吗?
最初,我使用 ExecWait 作为我的第一个命令。当我看到同样的问题时,我转而使用 Exec,然后添加了一个 Sleep 5000 以睡眠 5 秒,因为我认为这可能是一个时间问题。
我仔细检查了我的引号以确保它们匹配。
NSIS 默认有 1024 个字符的限制。我猜当 $INSTDIR 被扩展时你超过了那个限制。您可以下载 large string build 或执行批处理文件:
Section
InitPluginsDir
FileOpen [=10=] "$PluginsDir\test.cmd" w
FileWrite [=10=] '@echo off$\n'
; Write out example command in pieces:
FileWrite [=10=] '"$sysdir\forfiles.exe"'
FileWrite [=10=] ' /P "$windir" /S'
FileWrite [=10=] ' /M "*shell32*"$\n'
FileClose [=10=]
ExecWait '"$PluginsDir\test.cmd"'
SectionEnd