0

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

Exec '"$BINDIR\SubscriberACD.exe" //IS//SubscriberACD --Install="$BINDIR\SubscriberACD.exe" --Description="带有 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=" 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"配置 SubscriberACD start=auto

请注意 NSIS 如何将这两行结合起来,并实际上覆盖了第一行的一些内容。关于造成这种情况的任何想法?NSIS 不喜欢带有长参数的命令吗?

最初,我将 ExecWait 用于我的第一个命令。当我看到同样的问题时,我切换到使用 Exec,然后添加了一个 Sleep 5000 以休眠 5 秒,因为我认为这可能是一个时间问题。

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

4

1 回答 1

1

NSIS 默认有 1024 个字符的限制。我猜当 $INSTDIR 扩展时你会超过这个限制。您可以下载大字符串构建或执行批处理文件:

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
于 2016-08-02T19:36:12.097 回答