WinForm程序创建证书签名安装发布自动更新全过程文档格式.docx

上传人:b****3 文档编号:17095336 上传时间:2022-11-28 格式:DOCX 页数:15 大小:499.31KB
下载 相关 举报
WinForm程序创建证书签名安装发布自动更新全过程文档格式.docx_第1页
第1页 / 共15页
WinForm程序创建证书签名安装发布自动更新全过程文档格式.docx_第2页
第2页 / 共15页
WinForm程序创建证书签名安装发布自动更新全过程文档格式.docx_第3页
第3页 / 共15页
WinForm程序创建证书签名安装发布自动更新全过程文档格式.docx_第4页
第4页 / 共15页
WinForm程序创建证书签名安装发布自动更新全过程文档格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

WinForm程序创建证书签名安装发布自动更新全过程文档格式.docx

《WinForm程序创建证书签名安装发布自动更新全过程文档格式.docx》由会员分享,可在线阅读,更多相关《WinForm程序创建证书签名安装发布自动更新全过程文档格式.docx(15页珍藏版)》请在冰豆网上搜索。

WinForm程序创建证书签名安装发布自动更新全过程文档格式.docx

证书导出工具用于将.spc和.pvk文件导出为pfx证书文件。

导出时,会提示创建证书的密码

输入正确的密码后,出现导出向导界面,点击下一步,选择“是,导出密钥”,然后点击下一步,

出现证书类型选择界面,选择“个人信息交换-PKCS#12(.PFX)(P)”(只有这一种可选,并且其下面的选项均不选择),再点击下一步,

出现私钥保护密码选项,输入密码,然后点击下一步,在文本框中输入要生成的文件名(一般与证书名称一致),点击下一步

显示完成窗口,并显示导出证书的信息。

三、发布

(1)web浏览器发布应用程序

首先我给大家介绍一种很快捷的方法,不用在vs上面添加部署的那个项目。

也就是所谓的web浏览器发布应用程序。

还是和上面一样。

在所要发布的项目上面右击属性,选择publish属性

下图是应用程序再浏览器中的效果:

(2)添加安装、部署项目

右键点击整个解决方案添加安装项目。

如下图

接着就开始添加主要输出的文件,就是所谓打包的项目。

按照上面的步骤进入添加项目输出组窗口,如下图

接下来我来教你如何添加一个卸载程序

按照最上面的图片上显示的,添加一个输出的文件。

找到C:

\WINDOWS\system32目录下选择msiexec.exe文件。

将msiexec.ex添加到文件夹中后,给它增加一个快捷方式,改名为delete.exe。

之后修改delete.exe的属性Arguments为\x{6DCF3E96-7334-479D-B0B7-A36439E050C5},大括号中的数字是安装项目的ProductCode属性(查找此属性必须是左键选中安装项目,不是右键点击查找属性)。

之后生成安装项目。

待生成成功后,就可进行安装使用。

具体视图如下:

下面的是安装和卸载的视图。

四、手动更新

手动更新就是客户在使用的时候,可以随时到网上去查看是否有最新版本的软件。

下面是我的具体思路,已经得到实现:

1、写一个webservice,提供一个获取服务器xml中版本的数据的方法。

2、在WinForm应用程序启动的时候,首先访问webservice获取服务器的xml中的版本号,然后获取客户端的xml中的版本号。

将两个版本号比较,若服务器中的版本号大,则提示到指定网站进行手动下载更新。

手动更新在这里就不为大家介绍了。

下面详细说一下我最有收获的项目:

自动更新。

在自动更新里面含盖了上面的手动更新的所有步骤。

五、自动更新

自动更新的软件的目的在于让客户不在为了寻找最新软件花费时间。

也不用去到开发商的网站上查找。

客户端的软件自动会在程序启动前查找服务器上最新的版本。

和自己当前软件的版本比较,如果服务器的是最新版本。

客户端则进行自动下载、解压、安装。

当然了下载是要有网络的,并且用户可以根据提示去完成操作。

再也不用为找不到最新版本的软件而头疼。

下面是我的大体思路,已经得到了实现:

将两个版本号比较,若服务器中的版本号大,则提示提示可以在线更新应用程序。

3、然后客户端自动下载网络上的RAR压缩包到本机的指定位置,进行自动解压缩。

解压缩完毕之后,用进程打开所解压过的exe文件进行软件安装。

同时关闭客户端软件所在的进程。

(1)web项目中的代码

首先我给大家先展示下我的web项目中的webservice的代码,这里面跟简单,只有一个方法。

项目需要发布到IIS上面。

1.1webservice中的代码

///<

summary>

///获取xml中的软件最新版本

/summary>

returns>

<

/returns>

[WebMethod]

publicstringGetEdition(stringpassword)

{

strings=string.Empty;

//在使用此方法的时候必须先判断传进来的参数,看其是否有权限使用此方法。

if(password=="

clkj"

XDocumentdocument=XDocument.Load(Server.MapPath("

XMLEdition.xml"

));

XElementelement=document.XPathSelectElement("

Content/Project/Edition"

);

if(element!

=null)

s=element.Value.ToString();

}

returns;

1.2xml中的代码

Xml代码如下面所示,很简单

?

xmlversion="

1.0"

encoding="

utf-8"

?

>

Content>

<

Projectid="

p1"

Name>

test<

/Name>

Edition>

2.0<

/Edition>

/Project>

/Content>

(2)WinForm项目中的代码

Web项目的代码就只有上面的一点,重点的还是在WinForm中。

在WinForm中首先要添加web引用,将上述的webservice访问地址复制过来使用。

下面我一步一步来为大家解析吧。

第一步:

2.1xml中的代码

客户端的代码和服务器断的xml代码大致相同,不同的只用Edition元素里面的值。

-<

 

1.0<

2.2Program.cs代码(设置起始页的代码)

在Program.cs(WinForm中设置起始页的地方)这个类中添加代码

[STAThread]

staticvoidMain()

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

LoadMath();

privatestaticvoidLoadMath()

//服务器上的版本号

stringNewEdition=string.Empty;

//应用程序中的版本号

stringOldEdition=string.Empty;

try

//获取webservice上的版本号

myService.WebServiceUpdateSoapClientc=newmyService.WebServiceUpdateSoapClient();

NewEdition=c.GetEdition("

clkj_ws"

catch(Exceptionex)

MessageBox.Show(ex.Message);

//获取系统中xml里面存储的版本号

XDocumentdocument=XDocument.Load("

OldEdition=element.Value.ToString();

catch(Exceptionexx)

MessageBox.Show(exx.Message);

doublenewE=double.Parse(NewEdition);

doubleoldE=double.Parse(OldEdition);

//比较两个版本号,判断应用程序是否要更新

if(newE>

oldE)

//更新程序¨

°

DialogResultdr=MessageBox.Show("

发现新的版本是否要更新该软件"

"

系统提示?

"

MessageBoxButtons.OKCancel,MessageBoxIcon.Information);

if(dr==DialogResult.OK)

//打开下载窗口

Application.Run(newDownUpdate());

else

//若用户取消,打开初始界面

Application.Run(newLogin());

2.3Main.cs(登录后的主界面)的代码

这个可以省略,没有实际意义

2.4DownUpdate.cs(更新页面)的代码

界面显示如下图

自动更新代码如下(其中更新按钮的name为btnDown,安装按钮的name为btnInstall):

//debug目录,用于存放压缩文件t

stringpath=Application.StartupPath;

publicDownExe()

InitializeComponent();

privatevoidDownExe_Load(objectsender,EventArgse)

btnInstall.Enabled=false;

//下载文件、自动解压缩文件

privatevoidbtnDown_Click(objectsender,EventArgse)

//自动下载压缩包,并且解压,最后关闭当前进程,进行安装

//设置进度条

List<

int>

resultList=newList<

();

for(inti=0;

i<

100;

i++)

resultList.Add(i);

//设置进度条的最大值和最小值

this.progressBar1.Maximum=resultList.Count;

this.progressBar1.Minimum=0;

foreach(intiteminresultList)

//下载压缩包

System.Net.WebClientclient=newSystem.Net.WebClient();

client.DownloadFile(@"

http:

//192.168.1.120/File/setup.rar"

path+@"

setup.rar"

this.progressBar1.Value++;

catch

MessageBox.Show("

当前没有网络或者文件地址不正确"

if(!

Exists())

不支持RAR解压缩"

return;

//解a压1

unCompressRAR(path+"

\\setup"

path,"

false);

btnInstall.Enabled=true;

btnDown.Enabled=false;

//打开下载好的exe文件,并且关闭当前客户端所在的进程

privatevoidbtnInstall_Click(objectsender,EventArgse)

if(File.Exists(path+@"

\setup\cboxbeta2.0.0.7.exe"

))

//打开下载好的exe文件

Process.Start(path+@"

//关闭当前进程

Process[]proce=Process.GetProcesses();

foreach(Processpinproce)

//当前运行软件的进程名字

if(p.ProcessName=="

TestAutoUpdate.vshost"

p.Kill();

break;

///解压缩文件t

paramname="

unRarPatch"

解压缩后的文件所要存放的路径?

/param>

rarPatch"

rar文件所在的路径<

rarName"

rar文件名<

deleteFlag"

publicstaticstringunCompressRAR(stringunRarPatch,stringrarPatch,stringrarName,booldeleteFlag)

RegistryKeykey=Registry.LocalMachine.OpenSubKey(@"

SOFTWARE\Microsoft\Windows\CurrentVersion\AppPaths\WinRAR.exe"

stringstr=key.GetValue("

).ToString();

key.Close();

System.IO.Directory.Exists(unRarPatch))

System.IO.Directory.CreateDirectory(unRarPatch);

stringstr2="

x\"

+rarName+"

\"

\"

+unRarPatch+"

+"

-y"

;

ProcessStartInfoinfo=newProcessStartInfo();

info.FileName=str;

info.Arguments=str2;

info.WindowStyle=ProcessWindowStyle.Hidden;

info.WorkingDirectory=rarPatch;

Processprocess=newProcess();

process.StartInfo=info;

process.Start();

process.WaitForExit();

process.Close();

if(deleteFlag&

&

System.IO.File.Exists(rarPatch+@"

+rarName))

System.IO.File.Delete(rarPatch+@"

+rarName);

catch(Exceptionexception)

throwexception;

returnunRarPatch;

///判读是否支持RAR自动解压缩

publicstaticboolExists()

return!

string.IsNullOrEmpty(Registry.LocalMachine.OpenSubKey(@"

).GetValue("

).ToString());

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1