具有很长参数列表的NSIS Exec命令被下一行切断

时间:2016-08-02 19:18:30

标签: nsis apache-commons-daemon

在我的NSIS脚本中,我有以下几行(没有将第一行转为代码块,因为它太长而且看起来很糟糕为1行):

执行'" $ BINDIR \ SubscriberACD.exe" // IS // SubscriberACD --Install =" $ BINDIR \ SubscriberACD.exe" --Description ="使用Apache Commons守护进程的用户服务" --Jvm =" $ JVMDIR \的jvm.dll" --Classpath =" $ CLASSESDIR \ SubscriberACD.jar; $ CLASSESDIR \ jeromq-0.3.5.jar; $ CLASSESDIR \杰克逊 - 数据绑定-2.6.3.jar; $ CLASSESDIR \杰克逊 - 核 - 2.6.3。罐; $ CLASSESDIR \杰克逊 - 注解-2.6.0.jar; $ CLASSESDIR \管理核心-util的-4.1.2.jar; $ CLASSESDIR \管理测量-4.1.2.jar; $ CLASSESDIR \管理-测量 - 检查点作家1.0.jar; $ CLASSESDIR \ JNA-4.2.2.jar; $ CLASSESDIR \ JNA平台-4.2.2.jar" --StartMode = jvm --StartClass = SubscriberACD.Subscriber --StartMethod = windowsService --StartParams = start --StopMode = jvm --StopClass = SubscriberACD.Subscriber --StopMethod = windowsService --StopParams = stop --LogPath =&# 34; $ INSTDIR \ SubscriberACD \日志" --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 ="使用Apache Commons守护进程的用户服务" --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秒,因为我认为这可能是一个时间问题。

我仔细检查了我的引号,以确保它们匹配。

1 个答案:

答案 0 :(得分:1)

默认情况下,NSIS的字符数限制为1024。我猜想当$ INSTDIR扩展时你超过了这个限制。您可以下载large string build或执行批处理文件:

Section
InitPluginsDir
FileOpen $0 "$PluginsDir\test.cmd" w
FileWrite $0 '@echo off$\n'
; Write out example command in pieces:
FileWrite $0 '"$sysdir\forfiles.exe"'
FileWrite $0 ' /P "$windir" /S'
FileWrite $0 ' /M "*shell32*"$\n'
FileClose $0
ExecWait '"$PluginsDir\test.cmd"'
SectionEnd