2013-03-20 4 views
1

나는 자동적으로 새롭게 할 수있는 Windows 서비스를 만들고있다. 계획은 사용 가능한 새로운 버전의 서비스가있을 때 실행되는 콘솔 응용 프로그램을 갖는 것입니다. 이 응용 프로그램은 MSI를 참조하여 새 버전의 서비스를 제거하고 다시 설치합니다. 따라서 응용 프로그램 폴더에 MSI 복사본이 필요합니다.MSI 복사본을 자체 응용 프로그램 파일에 추가 할 수 있습니까?

MSI는 설치시 응용 프로그램 폴더에 복사본을 저장할 수 있습니까? 그렇다면 어떻게?

미리 감사드립니다.

+0

당신이 제안한 것보다 훨씬 더 정통적인 방법이 있습니다. http://stackoverflow.com/questions/246886/process-for-updating-a-windows-service-automated-or-is-it-manual, http://stackoverflow.com/questions/106765/i-want를 참조하십시오. -my-c-sharp-windows-service- 자동 업데이트 자체 # 106799 및 http://stackoverflow.com/questions/691663/auto-update-library-for-net –

+0

@RobertHarvey, 이전에 이러한 게시물을 읽고 별도의 프로세스를 사용하여 서비스를 중지했다가 다시 시작하는 것이 좋습니다. 또한 설치 프로그램을 사용하는 것이 좋습니다. 이것은 업데이트 루틴을 구현하는 방법입니다. 내 솔루션이 어떻게 개선 될 수 있는지에 대한 명확한 설명을 제공해 주시겠습니까? 감사. – HamChunck

+0

여기에 좋은 예가 있습니다. http://stackoverflow.com/a/328211 –

답변

0

.msi를 자체적으로 복사하려고 시도하는 대신 (자기 참조 작업을하기 위해 실제 해킹이 필요한) 대신, .msi 파일을 이전 .msi 파일로 업그레이드하는 것이 좋습니다. 그런 다음 새로운 .msi가 필요하고 이전 .msi는 필요하지 않습니다.

또는 (WiX 도구 세트의 굽기 엔진을 사용하여) Bundle에 물건을 넣을 수 있으며 Bundle을 통해 자동 업데이트하는 방법이 있습니다.

0

처음에는 접근 방법이 잘못되었습니다.

새 버전을 사용할 수있는 경우 무언가를 업그레이드 할 수있는 기회가 많습니다.

  1. 것은 그들에 (일부 설치 autodownloader 기능을 가지고있다) 설치 확인 - 부분적인 해결책,
  2. 서비스는 새로운 버전 (백그라운드 스레드)를 발견 할 필요없이 자동 업그레이드 기회를 - 필요 몇 가지 개발 [MSI 침묵은 백그라운드에서 설치 ] < - 선호도
  3. 중앙 집중식 배포 - MS, IBM 등 중앙 집중식 설치를위한 솔루션이 있습니다. 따라서 새로운 솔루션이 준비되면 도메인에 배포 할 수있는 솔루션이 무엇이든 상관 없습니다. < - 그래서 대기업

+1 또한 서비스를 중지하지 않고이 작업을 수행 할 수있는 몇 가지 방법이 있습니다에 의해 tippicaly 사용, 비용 대비 효과가 없습니다. C#에서는 버전이있는 어셈블리를 즉시로드 및 언로드 할 수 있지만 개발자의 실제 생활을 힘들게 만듭니다.

2.nd 옵션을 선택한 경우 코드에서 "프로세스 asyncronly"를 시작할 수 있으므로 사용자 정의 설정 "my.msi -s config"를 정의 할 수 있지만 설치 프로그램이 기본 옵션 (자동 설치 검색)으로 실행됩니다. .파일". 설치 프로그램은 이미 존재하는 경우 서비스 자체 검사 및 중지를 준비해야합니다.

이것은 복잡한 이야기이며 내가 언급 한 몇 가지 키워드를 검색합니다.

+0

응답 해 주셔서 감사합니다! 두 번째 옵션은 내가보고있는 것입니다. 내 비동기 프로세스에서 내 MSI에 자동으로 응답하기를 원합니다. 이것은 내 MSI가 응용 프로그램 폴더에 자체 복사본을 만들길 원합니다. 말이 돼? – HamChunck

+0

Rob가 이전에 언급했듯이.당신이 능력을 되 돌리고 싶지 않으면 원래의 설치 프로그램을 저장하지 않아도됩니다. 당신이 조심하지 않으면 무한 루프를 막을 수 있습니다. 백그라운드에서 다운로드 한 다음 백그라운드에서 자동 설치를 수행해야합니다. – nBalu

관련 문제