Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
S
Setup
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
黄树航
Setup
Commits
38ae9d22
Commit
38ae9d22
authored
Mar 16, 2023
by
Damon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
完成下载安装功能
parent
3c203046
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
102 additions
and
17 deletions
+102
-17
ApiHelper.cs
Common/ApiHelper.cs
+8
-3
Utils.cs
Common/Utils.cs
+79
-0
ProgressView.xaml.cs
View/ProgressView.xaml.cs
+15
-14
No files found.
Common/ApiHelper.cs
View file @
38ae9d22
using
System.Net.Http
;
using
System.Data
;
using
System.Linq
;
using
System.Net.Http
;
using
System.Text.RegularExpressions
;
using
System.Threading.Tasks
;
...
...
@@ -6,7 +8,7 @@ namespace Setup.Common
{
internal
class
ApiHelper
{
private
const
string
_url
=
"http://crm.yilongex.cn/api/client/product/list?
name=BaibaoTest
"
;
private
const
string
_url
=
"http://crm.yilongex.cn/api/client/product/list?
productId=P15615
"
;
private
static
readonly
HttpClient
_httpClient
=
new
HttpClient
();
public
static
async
Task
<
string
>
CheckAsync
()
...
...
@@ -26,7 +28,10 @@ namespace Setup.Common
var
match
=
Regex
.
Match
(
input
,
pattern
);
if
(
match
.
Groups
.
Count
>
0
)
{
return
match
.
Groups
[
0
].
Value
;
var
values
=
match
.
Groups
[
0
].
Value
.
Split
(
':'
);
if
(
values
.
Count
()
!=
2
)
return
null
;
var
url
=
values
[
1
].
Trim
(
'"'
);
return
url
.
Contains
(
"http:"
)
?
url
:
"http:"
+
url
;
}
else
{
...
...
Common/Utils.cs
View file @
38ae9d22
using
System
;
using
System.IO
;
using
System.Net
;
using
System.Text
;
using
System.Threading.Tasks
;
namespace
Dqkj.Setup
{
...
...
@@ -53,5 +55,82 @@ namespace Dqkj.Setup
return
dir
;
}
}
/// <summary>
/// Http方式下载文件
/// </summary>
/// <param name="url">http地址</param>
/// <param name="localfile">本地文件</param>
/// <returns></returns>
public
static
async
Task
<
bool
>
DownloadAsync
(
string
url
,
string
directory
,
string
fileName
)
{
bool
flag
=
false
;
long
startPosition
=
0
;
// 上次下载的文件起始位置
FileStream
writeStream
;
// 写入本地文件流对象
if
(!
Directory
.
Exists
(
directory
))
{
Directory
.
CreateDirectory
(
directory
);
}
var
localFile
=
directory
+
fileName
;
// 判断要下载的文件夹是否存在
//if (File.Exists(localFile))
//{
// writeStream = File.OpenWrite(localFile); // 存在则打开要下载的文件
// startPosition = writeStream.Length; // 获取已经下载的长度
// writeStream.Seek(startPosition, SeekOrigin.Current); // 本地文件写入位置定位
//}
//else
//{
// writeStream = new FileStream(localFile, FileMode.Create);// 文件不保存创建一个文件
// startPosition = 0;
//}
if
(
File
.
Exists
(
localFile
))
{
//不断点续传
File
.
Delete
(
localFile
);
}
writeStream
=
new
FileStream
(
localFile
,
FileMode
.
Create
);
// 文件不保存创建一个文件
startPosition
=
0
;
try
{
HttpWebRequest
myRequest
=
(
HttpWebRequest
)
HttpWebRequest
.
Create
(
url
);
// 打开网络连接
if
(
startPosition
>
0
)
{
myRequest
.
AddRange
((
int
)
startPosition
);
// 设置Range值,与上面的writeStream.Seek用意相同,是为了定义远程文件读取位置
}
var
response
=
await
myRequest
.
GetResponseAsync
();
Stream
readStream
=
response
.
GetResponseStream
();
// 向服务器请求,获得服务器的回应数据流
byte
[]
btArray
=
new
byte
[
512
];
// 定义一个字节数据,用来向readStream读取内容和向writeStream写入内容
int
contentSize
=
await
readStream
.
ReadAsync
(
btArray
,
0
,
btArray
.
Length
);
// 向远程文件读第一次
while
(
contentSize
>
0
)
// 如果读取长度大于零则继续读
{
await
writeStream
.
WriteAsync
(
btArray
,
0
,
contentSize
);
// 写入本地文件
contentSize
=
await
readStream
.
ReadAsync
(
btArray
,
0
,
btArray
.
Length
);
// 继续向远程文件读取
}
//关闭流
writeStream
.
Close
();
readStream
.
Close
();
flag
=
true
;
//返回true下载成功
}
catch
(
Exception
e
)
{
writeStream
.
Close
();
flag
=
false
;
//返回false下载失败
}
return
flag
;
}
}
}
View/ProgressView.xaml.cs
View file @
38ae9d22
...
...
@@ -65,8 +65,8 @@ namespace Dqkj.Setup
public
async
void
Download
()
{
var
serverVersion
=
await
GetUpdateInfo
();
if
(
serverVersion
==
null
)
{
throw
new
Exception
(
"获取安装配置异常!"
);
}
//
var serverVersion = await GetUpdateInfo();
//
if (serverVersion == null) { throw new Exception("获取安装配置异常!"); }
if
(
ProcessHelper
.
CheckProcess
(
executeName
.
Replace
(
".exe"
,
""
)))
{
...
...
@@ -82,7 +82,7 @@ namespace Dqkj.Setup
DownloadWebClient
client
=
new
DownloadWebClient
();
client
.
DownloadFileCompleted
+=
Client_DownloadFileCompleted
;
client
.
DownloadProgressChanged
+=
Client_DownloadProgressChanged
;
client
.
DownloadFileAsync
(
new
Uri
(
serverVersion
.
Url
),
zip_temp
,
serverVersion
);
client
.
DownloadFileAsync
(
new
Uri
(
defaultUpdateXmlUrl
),
zip_temp
);
//Application.Run(frm);
}
...
...
@@ -103,28 +103,28 @@ namespace Dqkj.Setup
{
if
(
File
.
Exists
(
zip_temp
))
{
var
serverVersion
=
(
e
.
UserState
as
UpdateInfo
);
//
var serverVersion = (e.UserState as UpdateInfo);
//通过文件MD5检测文件是否下载完整
var
md5
=
Utils
.
GetMD5HashFromFile
(
zip_temp
);
if
(
md5
==
serverVersion
.
Md5
)
{
//
var md5 = Utils.GetMD5HashFromFile(zip_temp);
//
if (md5 == serverVersion.Md5)
//
{
DecompressZip
(
zip_temp
,
_installPath
);
//解压升级包
//DirectoryHelper.CopyDirectory(unzip_temp, app); //替换进app目录中
VersionInfo
localVersion
=
new
VersionInfo
();
//替换新版本号
localVersion
.
Version
=
serverVersion
.
Version
;
//
localVersion.Version = serverVersion.Version;
//刷新、保存本地版本信息
localVersion
.
Version
=
serverVersion
.
Version
;
//
localVersion.Version = serverVersion.Version;
File
.
WriteAllText
(
Path
.
Combine
(
_installPath
,
"version.xml"
),
Encrypt
.
DesEncrypt
(
XmlHelper
.
Serializer
<
VersionInfo
>(
localVersion
)));
Completed
();
}
else
{
throw
new
Exception
(
"下载的安装文件不一致,请稍后再尝试安装"
);
}
//
}
//
else
//
{
//
throw new Exception("下载的安装文件不一致,请稍后再尝试安装");
//
}
}
}
catch
(
Exception
ex
)
...
...
@@ -157,6 +157,7 @@ namespace Dqkj.Setup
{
info
=
XmlHelper
.
Deserialize
<
UpdateInfo
>(
serverXml
);
}
var
result
=
await
Utils
.
DownloadAsync
(
defaultUpdateXmlUrl
,
@"d:\"
,
"test.zip"
);
}
catch
{
}
return
info
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment