更新安装厦门明升集团有限公司的最新客户端

2176人阅读
一、自动更新的实现
让客户端实现自动更新,通常做法是在客户端部署一个单独的自动更新程序。主程序启动后,访问服务端,检查配置文件是
否有更新版本,有更新版本就启动更新程序,由更新负责下载更新版本,并更新客户端程序,流程如下:
当流程进行到红色部分的是后就调用更新程序进行更新。
1)版本判断:
客户端和服务端都部署同一个版本文件,客户端登陆时发送验证给服务端判断版本是否一致。
Version.xml代码
&iq xmlns=&/xmtp& from=&*@domcool.local/updater& to=&*@domcool.local/updater& type=&get&id=&508f3e88-4bb0--cc41ef57fef3&&
&query xmlns=&/xmtp/disco#update& version=&& lastUpdateTime=&&fileUrl=&
x xmlns=&/xmtp/item&&
&/iq&版本文件主要比较服务端Version.xml文件和客户端Version.xml文件中Version(版本号)是否一致,如果服务端Version属性大于客户端的Version属性,则通过服务端的fileUrl属性获取新版本的下载地址。供更新程序使用。 2)删除原有更新包所有客户端更新文件均下载到C:\Documents and Settings\当前用户名\Local Settings\Temp 文件夹内,当客户端运行后首先判断是否有新更新包需要下载,如果没有则判断该临时文件夹内是否有旧有安装文件,如果存在,则删除旧有安装文件。private void RemoveOldSetupFile()
string temp = System.Environment.GetEnvironmentVariable(&TEMP&);
string folder = new DirectoryInfo(temp).FullN
if (File.Exists(folder + @&\& + setupName + &.exe&))
File.Delete(folder + @&\& + setupName + &.exe&);
if (File.Exists(folder + @&\& + setupName + &.msi&))
File.Delete(folder + @&\& + setupName + &.msi&);
备注:关于获取系统特殊文件夹的方法见博客
3)启动下载程序
下载程序和客户端程序是相互独立的,可以通过客户端开启新线程启动下载程序。下载程序在文件下载结束后可以关掉客户端程序,
并开启新线程启动安装程序进行安装。
private void Update()
if (ShouldUpdate(query.Version, this.version))
MessageBox.Show(&请更新客户端文件到版本[& + query.Version + &]&, &更新提示&, MessageBoxButtons.OK,MessageBoxIcon.Asterisk);
System.Diagnostics.Process.Start(Application.StartupPath + @&\AutoUpdater.exe&, query.FileUrl);
else { RemoveOldSetupFile(); }
private bool ShouldUpdate(string serverVersion, string localVersion)
if (!string.IsNullOrEmpty(serverVersion) && !string.IsNullOrEmpty(localVersion))
return </pareTo(localVersion) & 0;
return true;
} 调用AutoUpdater.exe文件时需要传入文件下载地址。System.Diagnostics.Process.Start(Application.StartupPath + @&\AutoUpdater.exe&, query.FileUrl); 4)下载程序代码下载程序界面 using S
using System.Collections.G
using </ponentM
using System.D
using System.D
using System.T
using System.Windows.F
using System.N
using System.IO;
using System.T
using System.D
namespace AutoUpdater
public partial class MainForm : Form
private WebClient
private string URl;
private string fileN
private string
private const string applicationFile = &Setup&;
public MainForm(string url)
InitializeComponent();
this.URl =
client = new WebClient();
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
client.Proxy = WebRequest.DefaultWebP
client.Proxy.Credentials = new NetworkCredential();
this.Hide();
//Thread thread = new Thread(UpdateFile);
//Thread.Sleep(15000);
//thread.Start();
UpdateFile();
public MainForm()
InitializeComponent();
/// &summary&
/// 下载完成调用
/// &/summary&
/// &param name=&sender&&&/param&
/// &param name=&e&&&/param&
void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
label1.Text = &文件接收完成&;
RunUpdate();
/// &summary&
/// 下载进度条
/// &/summary&
/// &param name=&sender&&&/param&
/// &param name=&e&&&/param&
void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
this.progressBar1.Value = e.ProgressP
/// &summary&
/// 开始下载
/// &/summary&
private void StartDownload()
fileName = URl.Substring(URl.LastIndexOf(&/&) + 1, URl.Length - URl.LastIndexOf(&/&) - 1);
path = GetTempFolder();
WebRequest myre = WebRequest.Create(URl);
catch (Exception ex)
MessageBox.Show(ex.Message, &Error&);
label1.Text = &开始下载文件...&;
client.DownloadFileAsync(new Uri(URl), path + @&\& + fileName);
catch (WebException exp)
label1.Text = exp.M
/// &summary&
/// 解压压缩包,格式必须是*.zip,否则不能解压
/// 因为是调用Windows内部api进行解压,只能够识别zip压缩包
/// 必须添加C:\WINDOWS\system32\shell32.dll的引用
/// &/summary&
private void UnZip()
Shell32.ShellClass sc = new Shell32.ShellClass();
Shell32.Folder SrcFolder = sc.NameSpace(this.path + @&\& + this.fileName);
Shell32.Folder DestFolder = sc.NameSpace(this.path);
Shell32.FolderItems items = SrcFolder.Items();
DestFolder.CopyHere(items, 20);
catch (Exception ex)
MessageBox.Show(ex.Message);
/// &summary&
/// 获取下载文件夹地址及解压文件存放地址
/// 此地址默认为C:\Documents and Settings\当前用户名\Local Settings\Temp 文件夹
/// &/summary&
/// &returns&&/returns&
private string GetTempFolder()
string folder = System.Environment.GetEnvironmentVariable(&TEMP&);
return new DirectoryInfo(folder).FullN
/// &summary&
/// 开始下载文件
/// &/summary&
private void UpdateFile()
this.Hide();
//如果临时文件夹存在setup安装文件,就直接调用安装文件
if (File.Exists(GetTempFolder() + @&\& + applicationFile + &.exe&) && File.Exists(GetTempFolder() +@&\& + applicationFile + &.msi&))
label1.Text = &开始下载文件...&;
this.progressBar1.Value = this.progressBar1.M
label1.Text = &文件接收完成&;
RunUpdate();
//如果临时文件夹不存在setup安装文件,就从网络下载
RemoveSetupFile();
StartDownload();
/// &summary&
/// 清除旧有已下载的安装文件
/// &/summary&
private static void RemoveSetupFile()
string temp = System.Environment.GetEnvironmentVariable(&TEMP&);
string folder = new DirectoryInfo(temp).FullN
if (File.Exists(folder + @&\& + applicationFile + &.exe&))
File.Delete(folder + @&\& + applicationFile + &.exe&);
if (File.Exists(folder + @&\& + applicationFile + &.msi&))
File.Delete(folder + @&\& + applicationFile + &.msi&);
/// &summary&
/// 下载完毕,开始执行更新程序
/// &/summary&
private void RunUpdate()
foreach (Process p in Process.GetProcesses())
if (p.ProcessName.ToLower().StartsWith(&uccompanion&))
if (MessageBox.Show(&UCCompanion正在运行,是否关闭当前程序安装更新?&, &安装UCCompanion&,MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
Process.Start(GetTempFolder() + @&\& + applicationFile + &.exe&);
MessageBox.Show(&UCCompanion下载完成,将在下次启动时提醒更新!&);
catch (Exception ex)
MessageBox.Show(ex.Message);
this.Close();
/// &summary&
/// 重载WindProc判断点击关闭按钮(X)时,隐藏程序界面
/// &/summary&
/// &param name=&msg&&&/param&
protected override void WndProc(ref Message msg)
const int WM_SYSCOMMAND = 0x0112;
const int SC_CLOSE = 0xF060;
if (msg.Msg == WM_SYSCOMMAND && ((int)msg.WParam == SC_CLOSE))
this.Hide();
base.WndProc(ref msg);
/// &summary&
/// 双击图标弹出界面
/// &/summary&
/// &param name=&sender&&&/param&
/// &param name=&e&&&/param&
private void icon_notify_MouseDoubleClick(object sender, MouseEventArgs e)
this.Show();
this.WindowState = FormWindowState.N
/// &summary&
/// &/summary&
/// &param name=&sender&&&/param&
/// &param name=&e&&&/param&
private void MainForm_SizeChanged(object sender, EventArgs e)
if (this.WindowState == FormWindowState.Minimized)
this.Hide();
private void MainForm_Load(object sender, EventArgs e)
this.Hide();
static class Program
/// &summary&
/// 启动,接收传入网址作为参数
/// &/summary&
/// &param name=&agr&&&/param&
[STAThread]
static void Main(string[] agr)
if (agr.Length == 1 && agr[0].StartsWith(@&http://&))
MainForm form = new MainForm(agr[0]);
Application.Run(form);
将AutoUpdater项目生成的文件添加到客户端文件中,在客户端的Update()方法里调用updater,实现更新文件的下载。
以上就已经实现了自动更新功能,下面将讨论文件安装包的制作。
二、安装包的制作
1)创建安装项目
2)鼠标右击Setup项目选择&视图,可以看到制作安装包常见的视图有以下几个
最常用的视图有“文件系统”,“用户界面”和“启动条件”。
3)指定安装属性
鼠标左键单击项目名称,记住是左键单击,然后点击属性标签,注意:不是右击的属性
a.需要注意的是Version属性,每次版本更新时Version&#20540;必须后面的版本大于前面的版本。每次更改Version&#20540;时Projectcode会更改一次。
其中你修改安装项目的版本号时,比如从v1.00 到1.01,在你再次生成项目的时候,会提示你是否允许修改ProductCode,选择&是&,
程序会自动修改ProductCode,选择否将保持相同的ProductCode,即不能自动卸载旧的版本.
b.在以后版本中要确认和以前的版本两个版本有不同的ProductCode和相同的UpgradeCode
c.manufacturer属性指定制造商名称。
d.detectnewerinstalledversion属性选择为true,
e.removepreviousversions选择为true
鼠标左键单击项目名称,此次是右键单击,然后点击属性,弹出属性页,选择“系统必备”。
在打开的系统必备页中,选中如下中的选择项,这个很重要!!!!!1!!!!!选上以后,在生成的安装文件包中
包含.netframework组件.(这个选项默认是没有选中的)。
4)文件系统视图
文件系统视图左侧根目录树下有3个子节点。
a.应用程序文件夹:将所有待打包的应用程序的可执行文件和相应的类库和组件拖动到该目录下。该目录可以创建子
目录,项目安装完毕以后的文件夹结构会和该目录下结构一致。
然后右击左边的&应用程序文件夹&打开属性对话框,修改文件释放路径,[ProgramFilesFolder][Manufacturer]\[ProductName]。
安装程序默认安装目录会是&c:\programm file\制造商名称\安装解决方案名称&;
b.用户的“程序”菜单和用户桌面:用于在开始菜单创建文件快捷方式
在应用程序文件夹中将需要生成的快捷方式的文件添加快捷方式并拖动到用户的“程序”菜单和用户桌面
c.添加文件卸载功能
在添加你的应用程序项目的时候,多添加一个msiexec.exe进去,这个文件在c:\windows\system32文件夹下。
为其在程序菜单添加一个快捷方式,把他的名字改成&Uninstall.exe&,指定Icon快捷方式显示的图标。然后下面我们
要的做的就是查找这个部署项目的ProductCode了,鼠标左键单击项目名称,记住是左键单击,然后点击属性标签,注意:
不是右击的属性,这个区别很大,这时你就可以看到ProductCode了
然后打开你创建的那个卸载程序的快捷方式的属性对话框,在Aguements属性中输入&/x {ProductCode}&
5)用户界面视图
在“欢迎使用”后,“安装文件夹”前添加“许可协议”对话框。
licensefile选择协议,协议的&#26684;式为rtf。
6)启动条件视图
为启动安装程序制定最低framework要求。
7)实现安装、卸载过程中的其他额外的操作。比如安装结束后启动程序,卸载程序后同时删除网络下载打安装包等功能。
a.新建一个空的项目InstallCompenent,步骤为:解决方案-&右键添加-&新建项目-&选择&空项目&-&
输入名称&InstallCompenent&-&确定,完成项目的添加.
b.在InstallCompenent项目中右键-&添加-&新建项-&选择安装程序类-&输入名称&Installer&,完成installer类的添加.
修改代码为:
using System.C
using System.Collections.G
using </ponentM
using System.Configuration.I
using System.R
using System.IO;
namespace InstallCompenent
[RunInstaller(true)]
public partial class UccompanionInstaller : Installer
private const string zipPacket = &UCCompanionSetup(0918).zip&;
/// &summary&
/// 应用程序入口
/// &/summary&
public static void Main()
/// &summary&
/// 构造函数
/// &/summary&
public UccompanionInstaller()
InitializeComponent();
/// &summary&
/// 重写安装完成后函数
/// 实现安装完成后自动启动已安装的程序
/// &/summary&
/// &param name=&savedState&&&/param&
protected override void OnAfterInstall(IDictionary savedState)
base.OnAfterInstall(savedState);
Assembly asm = Assembly.GetExecutingAssembly();
string path = asm.Location.Remove(asm.Location.LastIndexOf(&\\&)) + &\\&;
System.Diagnostics.Process.Start(path + &\\UCCompanion.exe&);
/// &summary&
/// 重写安装过程方法
/// &/summary&
/// &param name=&stateSaver&&&/param&
public override void Install(IDictionary stateSaver)
base.Install(stateSaver);
/// &summary&
/// 重写安装之前方法
/// &/summary&
/// &param name=&savedState&&&/param&
protected override void OnBeforeInstall(IDictionary savedState)
base.OnBeforeInstall(savedState);
/// &summary&
/// 重写卸载方法
/// 卸载程序后也删除程序的安装包
/// &/summary&
/// &param name=&savedState&&&/param&
public override void Uninstall(IDictionary savedState)
string temp = System.Environment.GetEnvironmentVariable(&TEMP&);
string folder = new DirectoryInfo(temp).FullN
if (File.Exists(folder + @&\setup.exe&))
File.Delete(folder + @&\setup.exe&);
if (File.Exists(folder + @&\setup.msi&))
File.Delete(folder + @&\setup.msi&);
if (File.Exists(folder + @&\&+zipPacket))
File.Delete(folder + @&\&+zipPacket);
base.Uninstall(savedState);
/// &summary&
/// 重写回滚方法
/// &/summary&
/// &param name=&savedState&&&/param&
public override void Rollback(IDictionary savedState)
base.Rollback(savedState);
c.在安装项目中右键-&添加项目输出-&选择&项目&-&InstallCompenent.完成主输出项目的添加.
d.打开自定义操作编辑器,在安装-&右键-&添加自定义操作-&选择&应用程序文件夹&-&选择&主输出来自InstallCompenent&,完成添加.
好了,点击“生成解决方案”,即可以生成带有卸载功能的安装程序了。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:55708次
排名:千里之外
转载:15篇
(5)(6)(1)(1)(1)(6)(1)(2)把你最喜欢的栏目添加到这里来哦
奥斯卡娱乐场官网:李元霸和李存孝谁更厉害?
澎湃新闻记者 辜安顺
日 01:59 来源:韩国中央日报
取缔;对无健康证明的从业人员按要求立即停止从事餐饮服务活动;对经营中使用的无证、无票的牛羊肉及私自屠宰的牛羊肉予以没收。  此次检查,该局黄河涯食药所、城管分局、工商所、公安派出所的执法人员联合行动。截至目前,出动执法车辆奥斯卡娱乐场官网:李元霸和李存孝谁更厉害? 津港人工岛,每日9:30、10:30、11:30、12:00固定发班4班次。单程预计1小时30分,当日往返。上车地点为天津旅游集散中心(天津站后广场)以及鼓楼中街旅游超市。票价:往返75元(含保险)。游客洛阳硕睿汽车销售有限公司成立于2016年3月,是一家专门经营众泰S系列汽车的4S店,同时为广大用户提供展示销售、配件、维保、钣喷、客休等服务的综合性服务展厅。 2016年,对于洛阳硕睿众泰来说是高速发展的一年,公司从月销售10台到至今月奥斯卡娱乐场官网:李元霸和李存孝谁更厉害?外,重在考查学生的推理能力和对时事的了解。&nbsp&nbsp&nbsp&nbsp据悉,此次公考为方便报考人员就近参加考试,全省共设置了14个考区,170个考点,9822机扰乱运营秩序和“黑出租”非法运营进行集中整治,严厉查处站外揽客、乱停乱放、扰乱管理秩序的行为。截止到目前,共依法对35名严重违规的出租车司机进行了处罚,查扣违法运营“黑</ true 快车报 /3032105.shtml report 15771 你说你很有钱,烦恼很多!因为全新一代奥迪Q5和全新一代沃尔沃XC60都被你看中奥斯卡娱乐场官网:李元霸和李存孝谁更厉害?玩起了无人驾驶汽车 一键叫车还自动找地方停车   一年一度的日内瓦车展本周四就将拉开帷幕,而在车展开始之前,大众就已急不可待,本周一就在日内瓦了发布旗下的首款无人驾驶汽车。   本周一,德国汽车厂商大众在日内瓦举教职工以国家进步、南开发展为己任,站位高远、胸怀宽广、脚踏实地做好各项工作。学校将进一步做好顶层设计,为广大教师心无旁骛地干事创新提供坚强保障。  在软件学院,魏大鹏指出,当前国家大力扶持IT。在科目三道路驾驶技能考试中,男性考生的考试合格率为82.61%,女性考生的考试合格率是70.12%男性考试的合格率均高于女性考生。那女司机到底到底是不是马路杀手呢?每天在马路上值勤的共建专业学生。记者看到,该专业有专门的直播教室,4个长筒麦克风安装在天花板,除了多媒体,还配有立体显示屏。麦克风方便全方位收集学生声音,立体显示屏是为更清晰显示教师脸部图像和9所学校的学生上课情况,让直播课不同于传统课的你讲我集思广益、群策群力,进一步凝练学科发展的特色方向,制订完善学院&十三五&规划。要更好发挥学院各级各类重点实验室、工程中心、引智基地等平台作用,组建科研团队,集中力量,攻关重大项目。要进一步密切
责任编辑:m澎湃新闻报料:9 & 澎湃新闻,未经授权不得转载
关键词 >> 奥斯卡娱乐场官网
评论(39)
追问(092)
澎湃新闻APP下载剑网3新版客户端安装更新常见问题解答
发布时间:13-12-29 00:18
来源:官方论坛 作者:陶鸢 [][复制链接]
  23日推出新版客户端版本后,将使我们的游戏体验得到大幅度提升。但部分玩家也遇到各式各样的问题。经过统计确认后,特地为大家做个解答说明。
  1、更新问题:
  个别玩家更换客户端后遇到更新错误或下载安装包及补丁包时对比MD5码不正确(反复下载亦是如此)。此情况属于地区网络缓存出现数据错误导致。为此,我们已经重新推出了新版客户端后的合并补丁包,大家可尝试重新下载使用。
  遇到此类网络缓存错误的朋友,亦可在手动下载补丁包时,在下载链接后面加上如 .RefreshEveryTime
(为任意随机数)的字符串。
  例如下载合并补丁包:
  http://jx3gc./jx3gc/zhcn_PakV3/jx3_c_3.2.1.5413-to-3.2.1.5443_zhcn_pakV3_patch.exe
  则尝试添加下载为:
  http://jx3gc./jx3gc/zhcn_PakV3/jx3_c_3.2.1.5413-to-3.2.1.5443_zhcn_pakV3_patch.exe/.RefreshEveryTime
  下载完成后,把下载的文件名改成原来的文件名,如上例中:jx3_c_3.2.1.5413-to-
3.2.1.5443_zhcn_pakV3_patch.exe。这样可暂时便面由于网路缓存错误导致无法下载正常数据的问题。此方法亦可适用于各种
MD5码不匹配问题。
  2、后台更新缓慢问题:
  由于此次新旧客户端更替时间较为宽松(3个月),同时为避免影响正常游戏,我们将后台下载速度限定为100K每秒。如果您觉得速度太慢,想一步到位,可直接在官网下载新版客户端安装即可,无需再等待后台缓慢自动更新。
  官网下载地址:/download
  3、安装新版客户端时需注意的几点问题:
  1)切忌用新版客户端覆盖安装旧版客户端(即 不能安装在同样路径下),这样可能会导致客户端运行出现问题;
  2)安装时,注意磁盘空间是否足够。安装客户端的硬盘分区不足,可能导致您安装完毕后启动客户端没反应;
  3)记得备份旧版客户端中的插件和截图,避免卸载旧版客户端后这部分内容丢失;
  4)建议对旧版使用的插件进行清零,部分过期插件可能导致客户端运行不正常;
  5)如果您是使用的非简体中文操作系统,请勿在安装路径中使用中文,这将导致客户端不能正常启动运行;
  6)如果安装新版客户端是,直接弹出提示&NSIS ERROR&,那么建议您先将下载好的安装包压缩文件全部解压出来再进行安装。
  4、新版客户端使用中的问题:
  如果您在进入游戏时,遇到了卡读条或闪退问题。请将客户端启动界面设置页面中的&启动日志记录&选项勾选上(或在客户端安装路径中找到binzhcngameconfig.exe
运行设置),待出现卡读条或闪退时,回到客户端安装路径中的 jx3binzhcnlogsJX3Client_2052-zhcn
文件下以当天日期命名的文件夹,并打包通过回帖形式上传至本帖(添加附件或批量上传)。
  剑网3相关资讯:
【责任编辑:52PK】TAG:
上一篇: 下一篇:
更多精彩相关推荐
*网友评论仅代表其个人看法,并不表明本站同意其观点及描述。
点击排行榜相关软件 /中文/ /中文/ /中文/ /中文/ /中文/ /中文/ /中文/ /中文/ /中文/ /中文/顶好评:50%踩坏评:50%请简要描述您遇到的错误,我们将尽快予以修正。轮坛转帖HTML方式轮坛转帖UBB方式
15.0M/中文/7.4
102.9M/中文/6.5
2.1M/中文/4.1
9.9M/中文/7.9
254KB/中文/7.1
1.4M/中文/.5
44.5M/中文/9.3
日2客户端更新文件由西西为大家带来,dota2在进入7.0版本后迎来了第一次更新,广大用户在今日登录dota2平台后不要忘记安装更新文件哟,作为当前全球最知名的竞技游戏之一,更新后游戏的体验将会更加精彩。dota2客户端更新日志:减少了未选中物品面板时的计分板面积修复了有教练时会在选人阶段看到敌方已选中英雄的问题修复了帕克、风暴之灵、剧毒术士、天怒法师和术士模型破碎的问题增加了机器人API的功能性修复了在交换英雄后顶部栏大招的通知状态增加了圣坛被摧毁后的信息通知修复了若干教程相关问题修复了中文和韩文的输入法问题将齐天大圣加入到创意工坊修复了同城聊天频道中被利用的漏洞修复了暂停倒计时的音效缺失的问题修复了商店搜索框文本在关闭并重新打开商店时不会保留的问题现在商店内打开网格视图后再次打开商店时会自动显示网格视图功能简介:添加更多关于机器人API功能修复了顶端的大招提示在交换英雄后不正确的问题添加圣坛被摧毁的通知修复了一些教程错误冥界亚龙新的技能图标现在游戏内可以输入中文和韩语(修复了IME的BUG)修复了暂停倒数时候的声音当您关闭商店并重新打开时,固定的商店搜索文本不会保留添加了可以观战真视界前两集的按键,还有第三集的开播倒计时dota2相关视频:
安卓官方手机版
IOS官方手机版
是一款完全免费的游戏。玩家可以购买一些英雄饰品套装,但是不会出现不平衡的收费项目,绝不影响平衡性。是一款独立游戏,脱离了的引擎,不需要再安装魔兽争霸了,由的地图作者联手开发的多人联机在线竞技游戏。以独
中文 / 970KB诸王战歌刷金币烧饼修改器是现金
中文 / 412M小熊爆枪英雄修改器是一款关于热
中文 / 1.9M魔兽无忧dota全图辅助工具是一款
中文 / 6.0MDOTA2超级助手为提供无激活码局域
中文 / 4.8M多玩盒子辅助一般都不会被河蟹,
中文 / 16.7M
玩好DOAT2,魔笛来帮你。实时推
日dota2客户端更新文件 安装包
下载帮助西西破解版软件均来自互联网, 如有侵犯您的版权, 请与我们联系。

我要回帖

更多关于 香港明升集团卡董 的文章

 

随机推荐