3

.NET 4.0에서 Visual Studio 2010을 사용하고 있습니다. Visual Studio 설치 프로젝트에서 설치된 Windows 서비스가 있습니다. 설치 프로젝트에서 나는 RemovePreviousVersion 속성을 True로 설정했습니다.Installer 클래스에서 Windows 서비스를 중지하는 중 문제가 발생합니다. 이벤트가 너무 늦게 발생합니다.

서비스가 포함 된 프로젝트에는 이전 버전에서 업그레이드 할 때 서비스를 중지하는 데 사용할 설치 관리자 클래스가 있습니다.

소프트웨어를 업그레이드 할 때 서비스가 이미 존재하며 실행 중일 수 있습니다. 설치 중 실행중인 경우 설치 프로그램은 파일이 이미 사용 중이라는 메시지를 표시하고 다시 시도, 계속 또는 설치 종료 옵션을 제공합니다. 이 단계에서 서비스를 수동으로 중지하고 다시 시도를 클릭하면이 방법이 작동합니다. 하지만 최종 사용자가이 작업을 수행하기를 원하지 않습니다.

MessageBox를 BeforeInstall, BeforeUninstall (설치 프로그램 이벤트), Install, Uninstall, Commit, Rollback (오버라이드 된 메소드)에 배치 했으므로 설치 중에 이러한 메시지가 호출되는 것을 볼 수 있습니다.

설치가 실행되면 파일이 사용 중이라는 프롬프트가 설치 관리자 클래스 코드 앞에 표시됩니다. 일단 서비스를 중지하고 다시 시도하면 메시지 상자가 계속 표시되며 설치 클래스의 메시지 상자가 표시됩니다. 따라서 설치 관리자 클래스는 실제로 너무 늦게 호출되어 실제로 아무것도 수행하지 못합니다.

이전 버전의 .NET에서의 동작이라고 생각하지 않습니다.

누구든지이 문제를 접하거나 어떤 제안이 있습니까?

필요하다면 Visual Studio 2010과 함께 제공되는 InstallShiled LE 프로젝트를 사용해 볼 수도 있지만 가능한 경우 Visual Studio 설치 프로젝트로 솔루션을 아는 사람이 있는지 알고 싶습니다. .

답변

6

FileInUse 설치 프로그램 대화 상자에서 다시 시도 메시지가 표시됩니다. InstallValidate 작업 중 Windows Installer는 사용중인 파일을 자동으로 감지하고 사용자에게 해당 파일에 대한 메시지를 표시합니다.

해결책은 InstallValidate 조치 전에 서비스를 중지하지 않고 중지하는 것입니다. 이 작업은 사용자 지정 작업을 통해 수행 할 수 있습니다.

Visual Studio로 InstallValidate하기 전에 사용자 지정 작업을 설정할 수 없습니다. 그러나 생성 된 후 Orca으로 MSI를 편집하고 InstallExecuteSequence 테이블에서 작업 순서를 변경할 수 있습니다.

대부분의 상용 설정 저작 도구 및 WiX는 사용자 동작에 대한 사용자 지정 시퀀스를 지원합니다.

+0

감사합니다. 올바른 방향으로 나를 가리키고 있습니다. –

관련 문제