0

私の NSIS スクリプトには、次の行があります (1 行目が長すぎて 1 行として見栄えが悪いため、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" config SubscriberACD start= auto

NSIS が 2 行を結合し、最初の行の内容の一部を実際に上書きしたことに注目してください。これを引き起こしている原因についてのアイデアはありますか? NSIS は長いパラメータを持つコマンドを嫌いますか?

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

引用符が一致することを確認するために、引用符を再確認しました。

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 に答える