최선의 방법은 무엇일한다.NET winforms 응용 프로그램를 업데이트하지 않고 그 자체를 사용하여 ClickOnce?

StackOverflow https://stackoverflow.com/questions/150994

문제

기술상의 이유로 나는 할 수 없습 ClickOnce 를 사용하여 자동 업데이트.인터넷 응용 프로그램 및 어셈블리입니다.는 가장 좋은 방법은 무엇입을 처리하는 자동 업데이트합니다.NET?

도움이 되었습니까?

해결책

제 생각에는 업데이트 응용 프로그램 블록 Clickonce의 선구자였습니다. 조사 할 가치가있을 수 있습니다. 소스 코드를 보는 것만으로는 몇 가지 아이디어를 촉발하기에 충분할 수 있습니다.

다른 팁

상용/오픈 소스가있는 제품이 있습니다. Wybuild & Wyupdate. 패치 능력이 있으며 사용하기가 간단합니다.

편집 : 나는 마이너스 숫자로 투표를 받고 있지만 내 게시물은 단지 뻔뻔스러운 판매가 아닙니다. 우리의 업데이트 인 Wyupdate는 오픈 소스이며 C#로 작성되었으며 BSD 라이센스에 따라 라이센스가 부여됩니다.

.NET 프레임 워크를 사용하여 처음부터 처음부터 업데이트를 구축하는 데 도움이 될 수 있다고 생각했습니다.

그러나 당신이해야한다면 저에게 투표하십시오.

약 3-4 년 전에 저는 앱 외부에있는 예를 게시했습니다. 업데이트가 감지되면 앱이 업데이트 ANS를 종료 한 다음 업데이트가 완료되고 앱이 다시 시작됩니다.

나는 이전 Gotdotnet 사이트에 예제를 게시했습니다 ... 나는 그것을 시도하고 찾아야합니다.

완벽하게 작동했으며 글을 쓰는 데 약 1-2 시간이 걸렸습니다.

Indigo Rose에는 제품이 있습니다 TrueUpdate 그것은 또한 당신을 위해 이것을합니다. 나는 과거에 관리되지 않은 앱과 관리되지 않은 앱에서 그것들을 사용했습니다. 기본적으로 서버에 넣은 파일 (HTTP, FTP, 원하는대로)입니다. 그런 다음 클라이언트 측 EXE에 전화하여 업데이트를 확인하십시오. 업데이트 파일이 가져오고 클라이언트의 버전 (선택, DLL 감지, 레지스트리 키 읽기 등)을 감지하는 논리가 있습니다. 그런 다음 적절한 업데이트를 찾아서 실행을 위해 파일을 다운로드합니다. 프록시를 통해서도 잘 작동합니다.

그들이하지 않는 유일한 일은 실제로 당신을 위해 패치를 만드는 것입니다. 수동으로 또는 다른 제품과 함께해야합니다. 그것은 commcerial 솔루션이며 필요하면 잘 작동합니다.

자신의 출발을위한 출발점으로, 아마도 볼 가치가있을 것입니다. MSDN에 관한 Alex Feinman의 기사 ".NET Compact 프레임 워크를 사용하여 자체 업데이트 응용 프로그램 작성"라는 제목.

나만의 글을 쓰십시오.

나는 그들이 처음으로 글을 쓰기가 다소 어렵다고 들었지만 그 후에는 간단 해집니다.

아직 하나를 쓰지 않았기 때문에 (내 목록에 있지만), 내가 생각한 것들 중 일부를 줄 수 있습니다. 자체 업데이트에 중요하기 때문에 정확한 DLL 버전을 유지하십시오. 그리고 업데이터가 자체적으로 업데이트 할 수 있는지 확인하십시오.

프로그램에서 CS 파일에서 다음과 같은 작업을 수행합니다.

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Update();
        Application.Run(new Form1());
    }

    private static void Update()
    {
        string mainFolder;
        string updateFolder;
        string backupFolder;

        foreach (string file in
            System.IO.Directory.GetFiles(updateFolder))
        {
            string newFile = file.Replace(
                updateFolder, mainFolder);

            if (System.IO.File.Exists(newFile))
            {
                System.IO.File.Replace(file, newFile, backupFolder);
            }
            else
            {
                System.IO.File.Move(file, newFile);
            }
        }
    }

또한 필요한 경우 디렉토리 구조를 선택하는 것이 재귀 적으로 만들 수 있습니다. 이를 통해 프로젝트에서 .dll을 업데이트 할 수 있습니다. 사실, 메인 .exe 외부의 모든 것. 그런 다음 응용 프로그램의 다른 곳에서 업데이트 해야하는 서버 (또는 어디에나) 파일을 가져 오면 업데이트 폴더에 넣고 응용 프로그램을 다시 시작할 수 있습니다.

프로젝트에서 오래 전에,사용합니다..NET Compact Framework1.0,썼는 자동 업데이트 응용 프로그램.우리가 사용 SqlCE 의 택시 배치 할 수있는 기능을 파일 장치에는(당신이 사용하는 것에 동기화 Framework 지금),그리고 우리는 별도의 exe 는 풀고의 택시,그리고 업데이트 파일이 있습니다.

는 다음과 같이 이동:사용자는 것입 업데이트하라는 메시지가 나타나 버튼을 클릭하여 드롭아웃 UI 응용 프로그램.업데이트 프로그램 exe 이상 걸릴 것을 택시는 파일에서 서버,백업하고 현재 dll 및 압축을 풉니 택시는 파일 wceload.UI 를 다음 다시 시작해야,그리고 실패하면,업데이트될 것입니다.이것은 여전히 재미있는 시나리오에서 소형 장치,하지만 더 나은 도구는 지금보다 그냥 sqlce.

나는 확실히 살펴 업데이트 응용 프로그램 블록과 동기화 프레임워크를 구현하는 경우 이 clickonce 옵션을 선택하지 않습니다.하지만 난 당신은 여전히 필요한 별도의 실행하기 때문에 dll 을 덮어쓰고 싶은 아마도 잠긴 파일에 있는 동안에 사용하는 exe,다음과 같이 하나의 답변이 이미 말했다.

내 자신의 AutoupDater를 작성했는데, AutoupDater는 URL이 포함 된 공통 구성 파일을 사용하여 업데이트 해야하는지 / 확인하기 위해 최신 버전을 다운로드합니다.

이렇게하면 앱을 업데이트하는지 여부를 업데이트 한 다음 응용 프로그램을 실행하여 일반 작동의 일부로 업데이트 된 업데이트를 확인하고 패치를 실행합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top