Visual Studio에서 "xcopy가 코드 4로 종료되었습니다"라는 메시지가 표시 될 때 무엇이 ​​잘못되었는지


125

빌드 후 이벤트에 익숙하지 않기 때문에 프로그램에서 무엇이 잘못되었는지 약간 혼란 스럽습니다. Visual Studio 2010에서 컴파일 할 때 다음을 얻습니다.

The command "xcopy C:\Users\Me\Path\Foo.bar\Library\dsoframer.ocx C:\Users\Me\Path\Foo.bar\bin\Debug\ /Y /E /D
xcopy C:\Users\Me\Path\Foo.bar\ApplicationFiles C:\Users\Me\Path\Foo.bar\bin\Debug\ /Y /E /D
xcopy C:\Users\Me\Path\url\ C:\Users\Me\Path\Foo.bar\bin\Debug\ /Y /E /D
rmdir /S /Q C:\Users\Me\Path\Foo.bar\bin\Debug\.gwt-tmp" exited with code 4.    

이 오류에도 불구하고 프로그램 은 정상적으로 실행되는 것처럼 보이지만이 문제를 무시하고 나쁜 일이 발생하지 않기를 바랍니다. 이상하게도이 줄은 단일 명령 (첫 번째 xcopy)으로 시작되었지만 프로젝트를 계속 컴파일 (다른 문제, 대부분 참조)하는 동안 오류 메시지가 점점 더 커졌습니다. 무슨 일이 일어나고 있는지 아십니까?

편집 : 실패한 것처럼 보이는 빌드 후 이벤트는 다음과 같습니다.

xcopy $(ProjectDir)Library\dsoframer.ocx $(TargetDir) /Y /E /D
xcopy $(ProjectDir)ApplicationFiles $(TargetDir) /Y /E /D
xcopy $(SolutionDir)com.myUrl.gwt\www $(TargetDir) /Y /E /D
rmdir /S /Q $(TargetDir).gwt-tmp

2
아래 답변 외에도 Administrator privileges. 특정 위치에 복사하려면 관리자 권한이 필요합니다.
— Nikhil 아그라 왈

답변:


166

Xcopy 종료 코드 4는 " 초기화 오류가 발생했습니다. 메모리 나 디스크 공간이 충분하지 않거나 명령 줄에 잘못된 드라이브 이름이나 잘못된 구문을 입력했습니다. "를 의미 합니다.

Visual Studio가 xcopy에 잘못된 인수를 제공하는 것 같습니다. 를 통해 빌드 후 이벤트 명령을 확인하십시오 Project > Right Click > Properties > Build Events > Post Build Event.

경우주의 $(ProjectDir)또는 유사한 매크로 측면 확장 결과 경로에 공백을, 그들은 필요한 큰 따옴표로 포장합니다. 예를 들면 :

xcopy "$(ProjectDir)Library\dsoframer.ocx" "$(TargetDir)" /Y /E /D1

내가 말했듯이 빌드 후 이벤트 스크립트에 대해 많이 알지 못합니다. 이걸 어디서 찾나요?
— Raven Dreamer 2011

1
프로젝트 속성> 빌드 이벤트로 이동
— Mark Cidade 2011

2
각 명령을 큰 따옴표 ( "command args")로 묶어보십시오 .
— Grant Thomas

@Mark Cidade- "빌드 이벤트"가 어디에도없는 것 같습니다. 나열된 공통 속성 : "시작 프로젝트, 프로젝트 종속성, 디버그 소스 파일, 코드 분석 설정". 나열된 구성 속성 : "configuration".
— Raven Dreamer 2011

4
@RavenDreamer : $(ProjectDir)(및 / 또는 유사) 확장 경로에 공백이 있으면 따옴표로 묶어야합니다. 예 :xcopy "$(ProjectDir)Library\dsoframer.ocx" "$(TargetDir)" /Y /E /D1
— Grant Thomas

34

감시 탭을 "출력"으로 전환하고 xcopy 명령을 찾습니다. 때때로 여기에서 문제를 해결하는 데 도움이 될 수있는 더 많은 메시지 (실제 xcopy 출력)를 찾을 수 있습니다. 출력 탭이 보이지 않으면보기-출력 메뉴를 사용하여 표시하십시오.


30

수락 된 답변 외에도 대상 폴더가 읽기 전용 인 경우에도 오류가 발생할 수 있습니다 (TFS 사용시 공통)


2
그리고 아래에 언급 된 @FelicePollano와 같이 출력 창으로 전환하면 볼 수 있습니다.
— Jedidja 2013-07-04

20

소스 파일을 찾을 수없는 경우 xcopy 는 오류 코드 4 도 반환합니다 .


3
이것이 제 경우였습니다. 전 사용 $(TargetDir)으로 끝나는 Release\ . 나를 위해 일한 $(ProjectDir)\bin\Release후행없이 사용\\
— Multinerd

12

xcopy 명령이 읽기 전용 파일을 덮어 쓰려고 할 때 ' exited with code 4 '오류를 받았습니다 . xcopy 명령에 / R 을 추가하여이 문제를 해결했습니다 . / R을 나타냅니다 읽기 전용 파일을 덮어 쓰기해야한다

이전 명령 :

XCOPY /E /Y "$(ProjectDir)source file" "destination"

새로운 명령

XCOPY /E /Y /R "$(ProjectDir)source file" "destination"

8

다른 답변에서 설명했듯이 종료 코드 4 에는 많은 원인이있을 수 있습니다.

결과 경로 이름이 최대 허용 길이를 초과 하는 경우를 발견 했습니다 ( 여기 처럼 ).

영향을받는 빌드 후 이벤트에 대해 xcopy를 robocopy로 대체했습니다. robocopy는 경로를 약간 다르게 처리하는 것으로 보이며 xcopy가 처리 할 수없는 복사 작업을 완료 할 수있었습니다.


5

의미 :

초기화 오류가 발생했습니다. 메모리 또는 디스크 공간이 충분하지 않거나 명령 줄에 잘못된 드라이브 이름 또는 잘못된 구문을 입력했습니다.

그래서 기본적으로 그것은 무엇이든 될 수 있습니다. 명령 프롬프트에서 한 번에 하나씩 명령을 실행하여 어떤 명령이 문제를 일으키는 지 파악하십시오.


3

나는 메시지와 함께 이것을 얻었다

잘못된 드라이브 사양

드라이브 이름을 지정하지 않고 네트워크 공유에 복사하는 경우 (예 :

xcopy . \\localhost

어디

xcopy . \\localhost\share

예상했다


2

이 문제를 겪었으므로 명령 줄에서 xcopy 명령을 실행하면 다음과 같이 표시됩니다.

File creation error - The requested operation cannot be performed on a file with
 a user-mapped section open.

실제로 Visual Studio가 무언가를 붙잡고있었습니다. 방금 Visual Studio를 다시 시작했는데 작동했습니다.


1

제 경우에는 잘못된 빌드 순서로 인해 문제가 발생했습니다. 한 프로젝트에는 빌드 후 이벤트에 대한 xcopy 명령이있어 bin 폴더에서 다른 폴더로 파일을 복사했습니다. 그러나 잘못된 종속성으로 인해 xcopy가 진행되는 동안 bin 폴더에 새 파일이 생성되었습니다.

VS에서 빌드 후 이벤트가있는 프로젝트를 마우스 오른쪽 버튼으로 클릭합니다. 빌드 종속성> 프로젝트 종속성으로 이동하여 올바른지 확인하십시오. 프로젝트 빌드 순서 (종속성 옆 탭)도 확인합니다.


1

이 오류는 저장소가 복사되는 곳에 공백이있는 경우 발생합니다. 예를 들어 내 프로젝트가 아래 위치에 복사 c://projects/My rest project 되면 여기에 공백이 표시됩니다. 저장소 경로를 아래로 변경하면 작동합니다. c://projects/myrestproject


0

나는 같은 문제가 있었다. 슬래시가 가리키는 방향을 확인할 수도 있습니다. 저에게는 슬래시 대신 백 슬래시를 사용하는 것이 좋습니다. 예

xcopy /s /y "C:\SFML\bin\*.dll" "$(OutDir)"

대신에:

xcopy /s /y "C:/SFML/bin/*.dll" "$(OutDir)"

0

VS 2017에서 업데이트하기 전에 잘 작동하는 빌드 후 명령이있었습니다. SDK 도구가 업데이트되었고 새 경로 아래에 있었기 때문에 어셈블리에 서명하는 데 사용한 도구를 찾을 수 없었습니다.

이것에서 바뀌었다 ....

call "%VS140COMNTOOLS%vsvars32"
    "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\x64\sn.exe" -Ra "$(TargetPath)" "$(ProjectDir)Key.snk"

이에...

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64\sn.exe" -Ra "$(TargetPath)" "$(ProjectDir)Key.snk"

매우 미묘하지만 중요한 변경 사항이므로이 오류가 표시되면 업데이트 후 경로를 확인하십시오.


0

주의해야 할 또 다른 점은 이중 백 슬래시 xcopy입니다. 입력 경로 매개 변수 에서는 허용 하지 않기 때문입니다 (그러나 출력 경로 에서는 허용 하지 않습니다 ...).

여기에 이미지 설명 입력


0

다른 솔루션이 디버그 모드에있는 경우 먼저 모두 중지하고 Visual Studio를 다시 시작합니다. 그것은 나를 위해 일했습니다.


0

이는 대상 폴더가 다른 프로세스에서 사용되는 경우에도 발생할 수 있습니다 . 대상 폴더를 사용할 수있는 모든 프로그램을 닫고 시도하십시오.

리소스 모니터 (Windows 도구)를 사용하여 대상 폴더를 사용하는 프로세스를 확인할 수 있습니다.

이것은 나를 위해 일했습니다!.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.