ClickOnce 배포 API를 사용하여 프로그래밍 방식으로 애플리케이션 업데이트 확인
ClickOnce가 배포된 경우 애플리케이션을 업데이트하는 방법으로 두 가지가 제공됩니다. 첫 번째 방법에서는 특정 간격마다 자동으로 업데이트를 확인하도록 ClickOnce 배포를 구성할 수 있습니다. 두 번째 방법에서는 ApplicationDeployment 클래스를 사용하여 사용자 요청과 같은 이벤트를 기반으로 업데이트를 확인하는 코드를 작성할 수 있습니다.
참고
System.Deployment.Application 네임스페이스의 ApplicationDeployment 클래스 및 API는 .NET Core 및 .NET 5 이상 버전에서 지원되지 않습니다. .NET 7에서 애플리케이션 배포 속성에 액세스하는 새로운 방법을 지원합니다. 자세한 내용은 .NET에서 ClickOnce 배포 속성 액세스를 참조하세요. .NET 7은 ApplicationDeployment 메서드와 동등한 메서드를 지원하지 않습니다.
다음 절차에서는 프로그래밍 방식으로 업데이트를 수행하는 코드를 보여 줍니다. 프로그래밍 방식으로 업데이트를 확인할 수 있도록 ClickOnce 배포를 구성하는 방법도 설명합니다.
ClickOnce 애플리케이션을 프로그래밍 방식으로 업데이트하려면 업데이트 위치를 지정해야 합니다. 이를 배포 공급자라고도 합니다. 이 속성을 설정하는 방법에 대한 자세한 내용은 ClickOnce 업데이트 전략 선택을 참조하세요.
참고
아래에 설명된 기술을 사용하여 한 위치에서 애플리케이션을 배포하고 다른 위치에서 업데이트할 수도 있습니다. 자세한 내용은 방법: 배포 업데이트의 대체 위치 지정을 참조하세요.
프로그래밍 방식으로 업데이트를 확인하려면
기본 명령줄 또는 시각적 도구를 사용하여 새 Windows Forms 애플리케이션을 만듭니다.
사용자가 업데이트를 확인하는 데 선택하도록 할 단추, 메뉴 항목 또는 다른 사용자 인터페이스 항목을 만듭니다. 해당 항목의 이벤트 처리기에서 다음 메서드를 호출하여 업데이트를 확인하고 설치합니다.
private void InstallUpdateSyncWithInfo() { UpdateCheckInfo info = null; if (ApplicationDeployment.IsNetworkDeployed) { ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment; try { info = ad.CheckForDetailedUpdate(); } catch (DeploymentDownloadException dde) { MessageBox.Show("The new version of the application cannot be downloaded at this time. \n\nPlease check your network connection, or try again later. Error: " + dde.Message); return; } catch (InvalidDeploymentException ide) { MessageBox.Show("Cannot check for a new version of the application. The ClickOnce deployment is corrupt. Please redeploy the application and try again. Error: " + ide.Message); return; } catch (InvalidOperationException ioe) { MessageBox.Show("This application cannot be updated. It is likely not a ClickOnce application. Error: " + ioe.Message); return; } if (info.UpdateAvailable) { Boolean doUpdate = true; if (!info.IsUpdateRequired) { DialogResult dr = MessageBox.Show("An update is available. Would you like to update the application now?", "Update Available", MessageBoxButtons.OKCancel); if (!(DialogResult.OK == dr)) { doUpdate = false; } } else { // Display a message that the app MUST reboot. Display the minimum required version. MessageBox.Show("This application has detected a mandatory update from your current " + "version to version " + info.MinimumRequiredVersion.ToString() + ". The application will now install the update and restart.", "Update Available", MessageBoxButtons.OK, MessageBoxIcon.Information); } if (doUpdate) { try { ad.Update(); MessageBox.Show("The application has been upgraded, and will now restart."); Application.Restart(); } catch (DeploymentDownloadException dde) { MessageBox.Show("Cannot install the latest version of the application. \n\nPlease check your network connection, or try again later. Error: " + dde); return; } } } } }
애플리케이션을 컴파일합니다.
Mage.exe를 사용하여 프로그래밍 방식으로 업데이트를 확인하는 애플리케이션 배포
연습: ClickOnce 애플리케이션 수동 배포에 설명된 대로 Mage.exe를 사용하여 애플리케이션을 배포하는 방법에 대한 지침을 따릅니다. Mage.exe를 호출하여 배포 매니페스트를 생성하는 경우 명령줄 스위치
providerUrl
을 사용하여 ClickOnce가 업데이트를 확인할 URL을 지정해야 합니다. 예를 들어 애플리케이션이http://www.adatum.com/MyApp
에서 업데이트하는 경우 배포 매니페스트를 생성하는 호출은 다음과 같습니다.mage -New Deployment -ToFile WindowsFormsApp1.application -Name "My App 1.0" -Version 1.0.0.0 -AppManifest 1.0.0.0\MyApp.manifest -providerUrl http://www.adatum.com/MyApp/MyApp.application
MageUI.exe를 사용하여 프로그래밍 방식으로 업데이트를 확인하는 애플리케이션 배포
- 연습: ClickOnce 애플리케이션 수동 배포에 설명된 대로 Mage.exe를 사용하여 애플리케이션을 배포하는 방법에 대한 지침을 따릅니다. 배포 옵션 탭에서 시작 위치 필드를 ClickOnce의 업데이트를 확인할 애플리케이션 매니페스트로 설정합니다. 업데이트 옵션 탭에서 이 애플리케이션의 업데이트 확인 확인란 선택을 취소합니다.
.NET Framework 보안
프로그래밍 방식 업데이트를 사용하려면 완전 신뢰 권한이 애플리케이션에 있어야 합니다.