2010-01-07 2 views
0

내 프로그램으로 "인플레 이스 (inplace)"업데이트를하고 싶습니다. 기본적으로 소프트웨어를 배포 한 곳에서 원격으로 로그인하고 다른 사용자가 (씬 클라이언트 방식으로) 여전히 사용하고있는 동안 설치하고 프로그램을 업데이트 할 수 있기를 원합니다.소프트웨어의 인플레 이스 업데이트 수행

번거롭지 않고 가능한가요? clickonce 기술에 대해 살펴 보았지만 실제로는 그렇게 생각하지 않습니다.

파이어 폭스의 업데이트 방법은 어떻습니까? 단지 프로그램을 다시 시작할 때까지 기다렸다가 업데이트되었을 때 알려줍니다.


UPDATE : 나는 사용자의 PC에 리모팅 아니에요. 이 프로그램은 서버에서 실행되며 원격으로 원격 업데이트를 통해 서버에서 직접 실행합니다.

웹 서버가 필요하므로 ClickOnce가 작동하지 않습니다.

+3

ClickOnce에는 웹 서버가 필요하지 않습니다. 그것은 가장 일반적인 시나리오 일뿐입니다. 서버의 네트워크 공유 나 폴더를 쉽게 사용할 수 있습니다. –

+0

그게 내가 생각했던 것이다. (나의 대답/코멘트를 보라). 명시 적으로 그것을 언급 주셔서 감사합니다, 나는 100 % 확신하지 못했습니다. –

+0

나는 그것을 몰랐다. 오스틴에게 감사한다. – Malfist

답변

3

나는 지금 찾을 수없는 몇 가지 예제 코드가 있지만 System.Deployment.Application namespace으로 Firefox와 비슷한 것을 할 수 있습니다.

ApplicationDeployment class을 사용하는 경우 원하는 것을 수행 할 수 있어야합니다. MSDN,이 클래스에서

...

프로그래밍 방식으로 현재 배포의 업데이트를 지원하고, 파일의 주문형 다운로드를 처리합니다.

+0

ClickOnce가 필요하다면 ClickOnce를 사용하지 않고이를 수행 할 수 있습니까? – Malfist

+0

질문에 대한 업데이트에 댓글을 달았습니다. ClickOnce 용 웹 서버가 필요 없습니다. –

1

업그레이드와 관련하여 ClickOnce와 Silverlight (브라우저에서 벗어남)가 모두 시나리오를 지원합니다. 사용자 컴퓨터에 원격 로그인 하시겠습니까? 아니. Firefox는 내가 말할 수있는 한 그렇게하지 않습니다.

이유를 설명하는 두 가지 방법을 다시 확인하고 질문에 추가하십시오. 그렇지 않으면 앞으로 나아가고 더 나은 대안을 제안하기가 어렵습니다.

편집 :이 "방금 업데이트했습니다. 다시 시작하십시오." 브라우저 외부에서 실행되는 Silverlight 응용 프로그램 호출이 필요합니다. 이 시점에서 나는 이것이 당신을위한 길일 수 있음을 확신합니다.

+0

웹 사이트가 아니며 winforms 응용 프로그램입니다. – Malfist

+1

이것이 ClickOnce의 문제인지 확실하지 않습니다. Silverlight는 물론 제외됩니다 (Winforms vs. WPF). 어쨌든 배포 된 응용 프로그램에 새 버전을 제공 할 수있는 방법을 찾아야합니다 (어떻게 업데이트 할 수 있습니까?). 요구 사항은 무엇이며 웹 서버는 왜 거래 차단기입니까? –

2

몇 가지 질문 :

  1. 로컬 소프트웨어를 실행하는 사용자되지만, 파일은 서버의 네트워크 공유에있는?
  2. 원격으로 연결하려는 서버에 원격으로 접속하여 실행하고 있습니까?
  3. 2. 서버에있는 파일을 실행하거나 "개인 폴더"에 복사하는 경우?

파일의 위치를 ​​변경할 수없고 모든 사람이 원격 위치에 있고 모든 사람이 파일을 현재 위치에서 실행 중이면 문제가있는 것입니다. 1 명의 사용자가 프로그램을 실행하는 동안에는 파일이 잠길 것입니다.일단 모든 사람이 나가면 파일을 업데이트 할 수 있습니다.

반면 사용자가 파일의 개인 복사본을 실행할 수있는 경우 파일의 최신 버전이 포함 된 중앙 폴더가있는 시스템을 설정하고 사용자 자신의 프로그램을 시작하면 중앙 폴더에 사용자가 실행하려고하는 것보다 새로운 버전이 있는지 확인합니다. 그럴 경우 새 버전을 먼저 복사하십시오.

또는 너무 오래 걸리고 사용자가 참을성이 없어지면 (예 : 사용자가 참을성이 없어지는 경우) 프로그램을 시작한 후 버전을 확인하고 종료 할 것을 알리는 대신 작동하도록 유도하십시오. 이 경우, 프로그램은 다음 시작시에 복사 작업을 수행 할 것이라는 것을 알려주는 플래그를 설정합니다.

복사 부분은 실제 복사를 수행하는 별도의 실행 파일을 가지고 대신 실행하거나 프로그램을 일시적으로 다른 위치에 복사하고 "원본 업데이트"라는 매개 변수로 해당 복사본을 실행할 수 있습니다 파일 ".

+0

모든 파일이 서버에 있습니다. 네, 저는 원격으로 서버에 프로그램을 실행하고 있습니다. 이 프로그램은 실제로 데이터베이스 만 파일을 처리하지 않습니다. – Malfist

2

코드 자체를 수정하도록 설계 할 수 있지만 (일반적으로 C#이 아닌가?), 이는 일반적으로 좋지 않은 아이디어입니다. 즉, 업데이트를 받으려면 다시 시작해야합니다. (리눅스에서는 사용중인 파일을 대체 할 수 있지만, 새로운 데이터가 메모리에로드 될 때까지 (즉, 응용 프로그램이 다시 시작될 때까지) 업데이트가 발생하지 않습니다.

Firefox에서 사용한 전략 프로그램이로드되기 시작할 때 검사되는 다른 파일에서 업데이트 된 실행 파일. 이렇게하면 리소스가 OS에 의해 잠기기 전에 프로그램이 업데이트로 프로그램을 덮어 쓸 수 있습니다. 전체 프로그램을 재시작하지 않아도 모듈의 일부가 "재시작"될 수 있도록 더 모듈화 된 프로그램을 설계 할 수 있습니다.

실제로이 작업을 수행하는 방법은 다른 사용자가 제공 한 링크에서 제공 한 것일 수 있습니다. 당신은이 프로그램없이 업데이트를 얻을 수 없을 것입니다 (로드 프로그램의 최신 버전을 찾고 메인 프로그램을 가질 수

라세 V. 칼슨에게 주어진 응답에 비추어

편집 :: 모두 밖으로). 그런 다음 더 이상 사용하지 않는 이전 버전을 제거 할 수 있습니다. 사람들이 얼마나 자주 프로그램을 다시 시작 하느냐에 따라 몇 가지 오래된 프로그램 버전이 나올 수 있습니다.

+0

+1 이것은 "부트 스트랩 (Bootstrapping)"이라고하며, 바이너리 실행 파일의 핵심 요소를 업데이트하는 유일한 방법입니다 (공유 개체, dll 및 서비스는 여전히 사용 전에 제어되어야합니다). 실제 속임수는 사용자가 응용 프로그램이 언로드된다는 것을 알 수 있도록 UI에 있습니다 (또는 배후에서 지식 없이도 수행 할 수 있습니다). – James

0

ClickOnce는 웹 서버를 필요로하지 않으므로 사용자가 소프트웨어를 실행하는 동안 업데이트를 게시 할 수 있습니다. 몇 분마다 새 업데이트를 확인하도록 앱을 코딩하고 새 버전이 있으면 앱을 다시 시작하라는 메시지를 표시 한 다음 업그레이드 프로세스를 거치게됩니다.

또 다른 옵션은 Silverlight OOB 응용 프로그램이지만 응용 프로그램이 WinForms/WPF 클라이언트 응용 프로그램으로 이미 빌드 된 경우 더 많은 작업이 수행됩니다.

0

다양한 배포/업데이트 시나리오 (.NET 응용 프로그램 용)는 Microsoft의 스마트 클라이언트 아키텍처 및 디자인 가이드에서 장단점을 설명합니다. 조금 늙었지만 기술적 인 세부 사항보다는 기본적인 아키텍처 원칙을 설명하고 있기 때문에 오늘은 여전히 ​​대부분을 차지하고 있습니다.이 PDF 버전이 있지만, 당신은뿐만 아니라 온라인을 찾을 :

Deploying and Updating Smart Client Applications

0
Is this possible without too much of a hassle? 

씬 클라이언트와 동시성 문제 및 Windows 설치의 복잡성을 고려할 때, 예 뜨거운 업데이트 것 시스템이 요구하는 방식대로하지 않으면서도 혼란 스러울 수 있습니다.

관련 문제