1

클라이언트 컴퓨터에 Windows 서비스를 설치하는 MSI가 있습니다. Windows 서비스는 서버의 웹 서비스를 호출하여 작업을 수행합니다. 처음에는 MSI와 웹 서비스가 모두 .NET 2.0 프레임 워크를 사용하여 빌드되었습니다.MSI 설치시 .NET 4.0 업그레이드 오류 - XML에 예상 속성 오류가 없습니다.

지난 분기에 우리 시스템을 .NET 4.0으로 업그레이드했습니다. 우리의 웹 서비스는 여전히 ASP.NET, 즉 asmx (및 WCF가 아님)입니다. 또한 MSI를 설치하기위한 전제 조건으로 프레임 워크 4.0을 설정했습니다. 고객의

하나는이 문제를보고 :

클라이언트는 .NET 프레임 워크 2.0을 사용하고, 그리고 자신의 시스템에 설치된 MSI의 이전 버전을했다. .NET Framework 4.0 버전의 MSI를 설치하려고 할 때, 전제 조건 때문에 프레임 워크 4.0을 설치하라는 메시지가 표시되었습니다. 프레임 워크 설치가 끝나면 MSI를 설치하려고 시도했으며이 오류가 발생했습니다. 누군가 나를 해결책으로 안내 할 수 있습니까? 필요한 경우 세부 정보를 제공 할 수 있습니다.

Error while upgrading to 4.0 MSI

편집 1 :

는 더 많은 연구에, 나는 내 AppName.installstate 파일입니다 발견했다. 제거는이 파일을 제거하지만 업그레이드는 수행하지 않습니다. 파일이 설치 디렉토리에 있습니다. 자세히 보면 파일 내용에 "http://schemas.xmlsoap.org/soap/envelope/:Envelope"이 표시됩니다. 모든 포인터가 크게 감사하겠습니다.

편집 2 :

사용자 지정 작업은 설치가 AppName.installstate 파일 및 사용자 정의 액션 제거는 파일을 삭제 만듭니다. 제 경우에는이 파일에 아무 것도하지 않는 MSI 업그레이드를하고 있습니다. 2.0과 4.0 (둘 다 수동으로 설치)의 installstate 파일을 비교했을 때 XML 구문, 스키마 및 내용에 큰 차이가 있음을 알 수있었습니다. 이유는 직렬화 오류가 발생했습니다. 이제 AppName.installstate가 업그레이드 될 때 덮어 쓰지 않는 이유를 알아야합니다. Google을 많이하고 있지만 아무데도 착륙하지 못했습니다. MSI 설치 로그를 보았으나 유용한 정보는 없습니다.

답변

1

유레카 !!!!

내 문제에 대한 해결책을 찾았습니다. 문제의

근본 원인 : MSI는 MSI 설치 중에 사용합니다 정보, 제거, 롤백을 저장하고 설치하는 동안 XML 파일 (application_name.installstate)을 생성합니다. 이 XML 파일의 형식은 .NET 2.0과 .NET 4.0, 즉 VS2005 및 VS2010을 사용하여 개발 된 MSI간에 완전히 다릅니다. 4 때문입니다.0 frmaework가 Old Framework 버전 (2.0)에서 생성 된 파일을 이해할 수 없으면 "Installstate 파일의 유형을 직렬화 할 수 없습니다"라는 오류 메시지가 나타납니다. 이 온라인 사용 가능한 문서가 없지만 , 내가 시도>http://social.msdn.microsoft.com/Forums/en-US/winformssetup/thread/bedbb8bd-dad5-4bcb-a87a-ac69386669b4/

솔루션을 발견이 논의가 (나는 그것이 작동 주위 부를 것이다) : 를 새 버전 설치하는 동안, 나는 명시 적으로 이전을 교체하고 새로운 형식의 XML 파일 (4.0). 예 : 내 패키지에 application_Name.installstate 파일 (새 버전에서 생성)이 포함되어 있으므로 업그레이드하는 동안 이전 파일을 덮어 씁니다. MSI가 오류없이 설치되었고 성공적으로 실행 중입니다.

누구나 문제와 해결책에 대해 자세히 알고 싶다면 여기에 답장하십시오.

+1

Windows Installer *는 installstate 파일을 생성하지 않습니다. Installer 클래스/InstallUtil 사용자 정의 액션 (서비스 내부). –

-1

이 오류 메시지는 설치 프로그램에서 1001 오류 메시지와 관련이 없습니다. 문제는 서비스 안에 있습니다.

서비스의 OnStart 메소드는 백그라운드 프로세스를 회전시키고 성공을 가능한 한 빨리 서비스 제어 관리자에게 반환해야합니다. SCM은 서비스를 시작하는 중 오류가 있다고 가정하기 전에 만 오래 기다릴 것이므로 중요한 경로에는 장기 실행 코드가 없어야합니다.

다른 스레드에서 작업을 실행하도록 서비스를 리 팩터하면 설치가 성공적으로 완료됩니다. 거기에서 DeSerialization 프로세스의 실제 문제에 집중할 수 있습니다.

+0

서비스는 여기서 언급 한 모든 작업을 정확하게 수행합니다. 이전에 잘 작동했던 것처럼 서비스에는 전혀 문제가 없습니다. 문제는 내가 2.0에서 4.0으로 업그레이드 한 후에 만 ​​나타났습니다. 업그레이드 된 Windows 서비스, 웹 서비스 및 설치/배포 프로젝트 –