2016-08-02 1 views
0

私のNSISスクリプトでは、次の行があります(1行目がコードブロックになっていませんでした。行):非常に長いパラメータリストを含むNSIS Execコマンドは、次の行で切り捨てられます

Execの「 "$ 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 \ 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 \ログ」--StdOutput =自動--StdError = auto」でどうにか

Sleep 5000 

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

、私はNSISのログを見ると、私は以下を参照してください。

実行:「はC:\プログラムファイル(x86)¥MyProduct¥SubscriberACD¥bin¥SubscriberACD.exe " - インストール=" C:¥Program Files(x86)¥MyProduct¥SubscriberACD¥bin¥SubscriberACD.exe " --Jvm = "C:¥Program Files(x86)¥MyProduct¥SubscriberACD¥jdk7¥jre¥bin¥server¥jvm.dll" "Apache Commons Daemonを使用したサブスクライバサービス" C:¥Program Files(x86)¥MyProduct¥SubscriberACD¥classes¥jeromq-0.3.5.jar; C:¥Program Files(x86)¥MyProduct¥SubscriberACD¥classes¥SubscriberACD.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 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がどのように2行を結合し、実際には最初の行の内容の一部を上書きしたかに注目してください。これの原因は何ですか? NSISは長いパラメータを持つコマンドを好きではありませんか?

元々、私は最初のコマンドにExecWaitを使用しました。同じ問題が発生したとき、私はExecを使用して切り替えて、それから5秒後にSleep5000を追加しました。それはタイミング問題であったかもしれないと思っていたからです。

二重引用符をチェックして一致することを確認しました。

答えて

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

関連する問題