我的程序有一个更新按钮,可以从GitHub下载最新版本的zip。
它工作了好几个月,但现在进度条不再更新,也没有从GitHub版本URL下载文件。
但是,我使用Google云端硬盘网址对其进行了测试,但是它有效,但网址命名约定与此项目不兼容。
有没有办法绕过代码,或者这是否与GitHub服务器规则有关?
// Progress Changed
//
public void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
// Progress Bar
this.Dispatcher.BeginInvoke((Action)(() =>
{
double bytesIn = double.Parse(e.BytesReceived.ToString());
double totalBytes = double.Parse(e.TotalBytesToReceive.ToString());
double percentage = bytesIn / totalBytes * 100;
this.progressBar.Value = int.Parse(Math.Truncate(percentage).ToString());
}));
}
// Download Complete
//
public void wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
// Set the waiter Release
// Must be here
this.Dispatcher.BeginInvoke((Action)(() =>
{
waiter.Set();
}));
}
在实际代码中,版本号是一个在URL中动态更改的字符串。
不起作用:
https://github.com/MattMcManis/Glow/releases/download/v0.0.5.4-alpha/Glow.zip
使用:
https://drive.google.com/uc?authuser=0&id=1_7hzLR4FFZXK6qr2sP0uOleeB2GgtghE&export=download
public void StartDownload()
{
// Start New Thread
Thread worker = new Thread(() =>
{
waiter = new ManualResetEvent(false);
Uri downloadUrl = new Uri("https://github.com/MattMcManis/Glow/releases/download/v0.0.5.4-alpha/Glow.zip);
//Async
wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);
wc.DownloadFileCompleted += new AsyncCompletedEventHandler(wc_DownloadFileCompleted);
wc.DownloadFileAsync(downloadUrl, tempDir + "Glow.zip");
// Wait for Download to finish
waiter.WaitOne();
});
// Start Download Thread
worker.Start();
}
答案 0 :(得分:2)
2018年2月22日GitHub disabled certain depreciated algorithms。这会导致您遇到的TLS错误。
修复(如评论中所述)仅允许WebClient
使用TLS1.2或更高版本进行连接。为此,请将ServicePointManager.SecurityProtocol
设置为SecurityProtocolType.Tls12
或更高。
我不确定为什么你的进度条会显示"一半"在停止之前下载,在开始下载时会立即弹出此错误。
答案 1 :(得分:0)
您只需要将URL从github转换为原始文件即可。 像这样:
https://raw.githubusercontent.com/MattMcManis/Glow/releases/download/v0.0.5.4-alpha/Glow.zip