2016-08-02 104 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