2010-05-09 4 views
2

내 프로젝트에는 사용자의 사무실 데스크톱 PC에서 실행되는 WinForms, WPF 및 Windows 서비스 프로그램이 포함되어 있습니다. 이 응용 프로그램이 특정 URL에서 사용 가능한 새 버전을 주기적으로 확인하고 새 버전을 자동으로 다운로드하며 사용자의 관심을 끌지 않고 새 버전으로 바꾸기를 원합니다 (XP에서 7로 Windows를 실행할 수 있으며 비 특권 계정 (활성 디렉토리의 일부가 될 수 있음)). 또는 전체 업데이트 패키지를 무인 설치 MSI 패키지로 배포 할 수 있어야합니다.Windows 바탕 화면과 서비스 C# 응용 프로그램 자동 업데이트를 가장 잘 구현하려면 어떻게합니까?

구현에 대한 권장 사항은 무엇입니까?

답변

1

당신은 운이 없어요 - 슬프게도 모든 해결책을 빨아 요. 가장 좋은 방법 (즉, 내가하고있는 일)은 정기적으로 유효 기간이 지났는 지 여부를 한 번 확인하고 사용자에게 알리는 것입니다. 내 경우에는 "Wndows Service"는 "사용자가 anothe 컴퓨터에 로그인하여 거의 모든 시간대에 서비스를 제어 함"을 의미하므로 실제로 경고 할 사람이 있습니다. 작동하지 않는다면 Windows 업데이트 서비스와 같은 것을 다시 구현해야합니다. 슬프게도 미리 정의 된 방법이 없습니다.

전혀 작동하지 않는 사용자, btw. - Windows 서비스의 설치/업데이트는 업데이트를 수행하는 Windows 서비스의 권한에서 비롯된 경우에도 관리 권한으로 수행해야합니다. 네가하는 일이 뭐든간에 더러운 문제.

나는 MSI와 함께 갈 것입니다. 기업 사용자는 소프트웨어 관리 (권한있는 프로그램을 설치할 수 있음), 사용하는 프로그램이 무엇이든간에 (여러 개 있음), 최종 사용자가 직접 설치할 수 있습니다 다른 모든 소프트웨어와 마찬가지로 관리자 권한이 있습니다. 어쩌면 중앙 서버에서 새 버전을 확인할 때마다 웹 서비스 호출을 할 수 있습니다.

1

이것은 모든 솔루션에 확실한 승자가없는 많은 단점이 있기 때문에 쉬운 솔루션이없는 문제가있는 영역입니다.

한 가지 옵션은 .dll 파일 만 바꾸는 것입니다. 이렇게하면 어셈블리의 서명이 방지되고 (실행 파일 자체를 업데이트하지 않기 때문에) 거의 모든 응용 프로그램 논리가 dll에 상주하도록 응용 프로그램을 구성해야합니다. 장점은 exe 자체에서 업데이트를 확인하고 사용 가능한 경우 다운로드 할 수 있지만 dll이 다른 위치 (예 : appdata의 응용 프로그램 플러그인 폴더)에 데이터로 저장되는 경우에만 가능하다는 것입니다.

다른 옵션은 로컬 관리자 권한으로 실행되는 Windows 서비스를 사용하여 업데이트를 다운로드하고 설치하는 것입니다. 이는 다른 Windows 서비스 인 afaik에 대해서도 사용자 개입없이 발생할 수 있습니다. 여기서 트릭은 업데이트 서비스를 실행 상태로 두지 않고 시작 (또는 시작될 때 또는 닫힌 상태) 중 하나에서 실제 응용 프로그램을 시작한 다음 사용자가 다운되는 것을 방지하기 위해 업데이트를 설치 한 후에 서비스를 중지하게하는 것입니다 시스템에 또 다른 업데이트 서비스가 있습니다.

마지막으로, "완전히 무인 된"부분을 삭제하는 것을 진지하게 고려해야합니다. 사용자는 간헐적 인 시작 지연이 문제가 될 수 있으며 현재 수행중인 의사 소통이 해를 끼치 지 않는다는 것을 알 수 있습니다. 필자는 특히 "새로운 버전이 발견되었습니다 - 설치 (지금) (종료) (나중에)"라는 말을 시작 대화 상자에 표시하는 솔루션을 좋아해 지연을 원할지 여부를 완전히 제어 할 수 있습니다. 내가 아는 모든 포커 클라이언트와 같은 일부 응용 프로그램은 서버 측 소프트웨어와 동기화되어야하며 사용자에게이 옵션을 제공하지 않지만 계속 진행중인 내용을 알 수 있도록 "업데이트 진행 중"대화 상자를 표시합니다. 설치가 자동으로 진행되는 한 나는 프롬프트에 대해 걱정하지 않을 것입니다.

+0

'특히 새로운 버전이 발견되었습니다 - 설치 (지금) (종료) (나중에)'라는 대화 상자를 표시하는 솔루션이 마음에 들었습니다. - 이것은 개인이 힘을 사용하는 경우에만 좋은 아이디어 일 수 있습니다 사용자.엔터프라이즈 환경에서는 일반적으로 사용자에게 기술 결정을 요청하는 것은 좋지 않습니다. – Ivan

+0

이반 : 동의합니다. 엔터프라이즈 업데이트는 중앙 집중화되고 자동으로 수행되어야합니다. –

관련 문제