2016-08-02 106 views
0

在我的NSIS脚本中,我有以下几行(没有将第一行变成代码块,因为它太长,看起来不好,因为1行):非常长的参数列表被下一行切断的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-核 - 2.6.3.jar; $ 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 =” $ INSTDIR \ SubscriberACD \日志” --StdOutput =自动--StdError =自动”

Sleep 5000 

ExecWait '"sc" config SubscriberACD start=" auto"' 

不知怎的,当我看着我的NSIS日志,我看到以下内容:

执行:“C:\程序文件(x86)\ MyProduct \ SubscriberACD \ bin \ SubscriberACD.exe“// IS SubscriberACD --Install =”C:\ Program Files(x86)\ MyProduct \ SubscriberACD \ bin \ SubscriberACD.exe“--Description = “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,然后添加一个Sleep5000睡5秒钟,因为我认为这可能是一个计时问题。

我再次检查了我的引号以确保它们匹配。

回答

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 
+0

我想切换到NSIS 3.0是不是现在的选择,因为我们有一个释放上来快,所以我会尽力的批处理文件选项。顺便说一句,我是NSIS的新手,并不确定你的NSIS代码的目的是什么。 :) – SpartaSixZero

+0

[这里](https://sourceforge.net/projects/nsis/files/NSIS%202/2.51/nsis-2.51-strlen_8192.zip/download)是NSIS 2特别版本。我的批处理文件代码没有真正的用途,它只是一个示例,显示如何构建和执行批处理文件... – Anders

+0

我能够通过减少字符串的总长度来解决此最大字符长度问题。谢谢 – SpartaSixZero