2016-08-02 2 views
0

NSIS 스크립트에는 다음과 같은 줄이 있습니다. 너무 길어서 1 줄로 보였기 때문에 첫 줄을 코드 블록으로 바꾸지 않았습니다. "$ BINDIR \ SubscriberACD.exe"설치 - "$ 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 \ 로그 "--StdOutput = 자동 --StdError = 자동차 '어떻게 든매우 긴 매개 변수 목록을 가진 NSIS 실행 명령은 다음 줄로 잘립니다.

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 데몬을 사용하는 구독자 서비스" 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; 프로그램 파일 (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을 사용하여 전환 한 다음 5 초 동안 절전 모드를 추가했습니다. 이후 타이밍 문제 일 수 있다고 생각했기 때문에 절전 모드를 5 초 동안 추가했습니다.

내 견적을 두 번 확인하여 일치하는지 확인했습니다.

답변

1

NSIS는 기본적으로 1024 자로 제한됩니다. $ INSTDIR이 확장되면 그 한계를 초과했을 것으로 짐작합니다. 당신은 large string build를 다운로드하거나 대신 배치 파일을 실행할 수 있습니다 : 우리는 릴리스 그래서 배치 파일 옵션을 시도 할 것이다 빠르게 올라오고 가지고 NSIS 3.0

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를 처음 접했을 때 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