본문 바로가기
C#

[C#] HttpClient download file example

by Jcoder 2022. 1. 11.

[C#] Webview2 runtime 설치 여부 및 설치 (tistory.com)

 

[C#] Webview2 runtime 설치 여부 및 설치

해당 코드는 .NET 5, .NET Framework로 바꿔서 사용해도 됨. using Microsoft.Win32; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using Sy..

jcoder1.tistory.com

 

기존엔 WebClient를 이용했지만 ms에서 HttpClient 사용 권장

public static async Task InstallWebview2RuntimeAsync()
{
	// 윈도우가 아니면 리턴, 그렇지만 다운로드 파일이 os 가리지 않는다면 제거해도 무방.
    if (!System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
        return;
    string firstPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
    string appName = Path.Combine(firstPath, "MicrosoftEdgeWebview2Setup.exe");

    try
    {
        using (HttpClient httpClient = new HttpClient())
        {
            var result = await httpClient.GetAsync("https://go.microsoft.com/fwlink/p/?LinkId=2124703");
            result.EnsureSuccessStatusCode();

            using (var stream = await result.Content.ReadAsStreamAsync())
            {
                using (var fs = new FileStream(appName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
                {
                    await stream.CopyToAsync(fs);
                }
            }

            Console.WriteLine("Webview2Runtime 다운로드 완료");

            if (File.Exists(appName))
            {
                Console.WriteLine("Webview2Runtime 설치 시작");
                await Process.Start(appName, " /silent /install").WaitForExitAsync();

                Console.WriteLine("Webview2Runtime 설치 완료");
                if (File.Exists(appName))
                {
                    File.Delete(appName);
                    StaticLogManager.WriteInfoLogToEventViewer("MicrosoftEdgeWebview2Setup.exe 삭제 완료");
                }
            }
        }
    }
    catch (HttpRequestException hre)
    {
        Console.WriteLine($"{nameof(HttpRequestException)} - {hre.Message}");
    }
    catch (Exception e)
    {
        Console.WriteLine($"InstallWebview2RuntimeAsync Error : {e.Message}{Environment.NewLine} Data : {e.Data}{Environment.NewLine} StackTrace : {e.StackTrace}");
    }
}