文档库 最新最全的文档下载
当前位置:文档库 › WinForm程序创建证书、签名、安装、发布、自动更新全过程

WinForm程序创建证书、签名、安装、发布、自动更新全过程

WinForm程序创建证书、签名、安装、发布、自动更新全过程
WinForm程序创建证书、签名、安装、发布、自动更新全过程

WinForm程序安装、发布流程

一、签名

所谓签名就是给应用程序一个身份,申请一个专利。签名的时候需要需要选择证书。就向我们上学一样,得奖了老师给你发个证书。如果不进行签名,杀毒软件会把你打包后的exe文件作为病毒处理。

签名的步骤:(1)右键点击所要发布的项目的属性。弹出如下图所示的窗口。

二、证书

在签名的部分提到了证书,在创建证书的时候我们一定要自己创建。因为在vs上面创建的证书默认到期时间都只有一年,这意味着每过一年你都要为你安装的应用程序再次创建一个证书。我们使用微软自带的vs控制台命令工具进行我们自己的自定义证书创建,可以设置有效期限。步骤如下:

打开Microsoft .NET Framework 的SDK命令提示,按以下步骤操作:

1、创建一个自我签署的X.509证书(.cer)和一个.pvk私钥文件,用到makecert工具,命

令如下:

2、makecert -r -n "CN=sqs3ng " -b 01/01/2011 -e 01/01/2020 -sv myselfName.pvk

myselfName.cer

按提示设置私钥密码(也可以不使用密码)即可在当前目录生成相关文件

2、利用X.509证书(.cer)创建发行者证书(.spc),用到cert2spc工具,命令如下:

cert2spc myselfName.cer myselfName.spc

3、从.pvk和.spc格式转换成.pfx格式,用到pvkimprt工具,命令如下:

pvkimprt -pfx myselfName.spc myselfName.pvk

注意此处需要下载并安装pvkimprt.exe,否则会提示"pvkimprt"不是内部或外部命令,也不是可运行的程序或批处理文件。

pvkimprt工具下载地址如下,下载后要先解压。

https://www.wendangku.net/doc/8d7731770.html,/download/vba50/Utility/1.0/NT5/EN-US/pv kimprt.exe

按提示操作可导出.pfx证书,若第1步设置了私钥密码,此处需要输入验证

证书导出工具用于将.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中的版本号。将两个版本号比较,若服务器中的版本号大,则提示到指定网站进行手动下载更新。

手动更新在这里就不为大家介绍了。下面详细说一下我最有收获的项目:自动更新。在自动更新里面含盖了上面的手动更新的所有步骤。

五、自动更新

自动更新的软件的目的在于让客户不在为了寻找最新软件花费时间。也不用去到开发商的网站上查找。客户端的软件自动会在程序启动前查找服务器上最新的版本。和自己当前软件的版本比较,如果服务器的是最新版本。客户端则进行自动下载、解压、安装。当然了下载是要有网络的,并且用户可以根据提示去完成操作。再也不用为找不到最新版本的软件而头疼。下面是我的大体思路,已经得到了实现:

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

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

然后获取客户端的xml中的版本号。将两个版本号比较,若服务器中的版本号大,则提示提示可以在线更新应用程序。

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

完毕之后,用进程打开所解压过的exe文件进行软件安装。同时关闭客户端软件所在的进程。

(1)web项目中的代码

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

1.1 webservice中的代码

///

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

///

///

[WebMethod]

public string GetEdition(string password)

{

string s = string.Empty;

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

if (password == "clkj ")

{

XDocument document = XDocument.Load(Server.MapPath("XMLEdition.xml"));

XElement element = document.XPathSelectElement("Content/Project/Edition");

if (element != null)

{

s = element.Value.ToString();

}

}

return s;

}

1.2 xml中的代码

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

test

2.0

(2)WinForm项目中的代码

Web项目的代码就只有上面的一点,重点的还是在WinForm中。在WinForm中首先要添加web引用,将上述的webservice访问地址复制过来使用。下面我一步一步来为大家解析吧。

第一步:

2.1 xml中的代码

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

-

-

test

1.0

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

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

[STAThread]

static void Main()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

LoadMath();

}

private static voi d LoadMath()

{

//服务器上的版本号

string NewEdition = string.Empty;

//应用程序中的版本号

string OldEdition = string.Empty;

try

{

//获取webservice上的版本号

myService.WebServiceUpdateSoapClient c = new

myService.WebServiceUpdateSoapClient();

NewEdition = c.GetEdition("clkj_ws");

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

try

{

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

XDocument document = XDocument.Load("XMLEdition.xml");

XElement element = document.XPathSelectElement("Content/Project/Edition");

if (element != null)

{

OldEdition = element.Value.ToString();

}

}

catch (Exception exx)

{

MessageBox.Show(exx.Message);

}

double newE = double.Parse(NewEdition);

double oldE = double.Parse(OldEdition);

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

if (newE > oldE)

{

//更新程序¨°

DialogResult dr = MessageBox.Show("发现新的版本是否要更新该软件", "系统提示?", MessageBoxButtons.OKCancel, https://www.wendangku.net/doc/8d7731770.html,rmation);

if (dr == DialogResult.OK)

{

//打开下载窗口

Application.Run(new DownUpdate ());

}

else

{

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

Application.Run(new Login());

}

}

}

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

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

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

界面显示如下图

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

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

string path = Application.StartupPath;

public DownExe()

{

InitializeComponent();

}

private void DownExe_Load(object sender, EventArgs e)

{

btnInstall.Enabled = fal se;

}

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

private void btnDown_Click(object sender, EventArgs e)

{

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

try

{

//设置进度条

List resultList = new List();

for (int i = 0; i < 100; i++)

{

resultList.Add(i);

}

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

this.progressBar1.Maximum = resultList.Count;

this.progressBar1.Minimum = 0;

foreach (int item in resultList)

{

//下载压缩包

https://www.wendangku.net/doc/8d7731770.html,.WebClient client = new https://www.wendangku.net/doc/8d7731770.html,.WebClient();

client.DownloadFile(@"http://192.168.1.120/File/setup.rar", path + @"setup.rar");

this.progressBar1.Value++;

}

}

catch

{

MessageBox.Show("当前没有网络或者文件地址不正确");

}

if (!Exists())

{

MessageBox.Show("不支持RAR解压缩");

return;

}

//解a压1

try

{

unCompressR AR(path + "\\setup", path, "setup.rar", false);

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

btnInstall.Enabled = true;

btnDown.Enabled = false;

}

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

private void btnInstall_Click(object sender, EventArgs e)

{

if (File.Exists(path + @"\setup\cboxbeta2.0.0.7.exe"))

{

//打开下载好的exe文件

Process.Start(path + @"\setup\cboxbeta2.0.0.7.exe");

//关闭当前进程

Process[] proce = Process.GetProcesses();

foreach (Process p in proce)

{

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

if (p.ProcessName == "TestAutoUpdate.vshost")

{

p.Kill();

break;

}

}

}

}

///

///解压缩文件t

///

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

///rar文件名

///

///

public static string unCompressR AR(string unRarPatch, string rarPatch, string rarName, bool deleteFlag)

{

try

{

RegistryKey key =

Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinR AR.exe");

string str = key.GetValue("").ToString();

key.Close();

if (!System.IO.Directory.Exists(unRarPatch))

{

System.IO.Directory.CreateDirectory(unRarPatch);

}

string str2 = "x \"" + rarName + "\" \"" + unRarPatch+"\""+" -y";

ProcessStartInfo info = new ProcessStartInfo();

info.FileName = str;

info.Arguments = str2;

info.WindowStyle = ProcessWindowStyle.Hidden;

info.WorkingDirectory = rarPatch;

Process process = new Process();

process.StartInfo = info;

process.Start();

process.WaitForExit();

process.Close();

if (deleteFlag && System.IO.File.Exists(rarPatch + @"\" + rarName))

{

System.IO.File.Delete(rarPatch + @"\" + rarName);

}

}

catch (Exception exception)

{

throw exception;

}

return unRarPatch;

}

///

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

///

///

public static bool Exists()

{

return !string.IsNullOrEmpty(Registry.LocalMachi ne.OpenSubKey(@"SOFTWARE\Microsoft\Windows\C urrentVersion\App Paths\WinR AR.exe").GetValue("").ToString());

}

Android应用程序的自动更新升级

Android应用程序的自动更新升级(自身升级、通过tomcat) 刚入手android一个多月,因公司需要提交技术文档,才写了这个demo测试,想保存下来,以备后用!有什么不对的地方欢迎大家指正,这个示例也是参考了网上别人的demo自己做的。 Android应用程序的升级(自身升级) 一、引言: 很多的Android应用都具有版本检测和自动更新的功能,用户一键就可以完成软件的升级和更新。Android应用程序的升级本质上是利用了Linux系统的软件包管理和安装机制,而对于上层这一功能的开发来说很容易,只需要我们开发人员利用Android自带的API就可以实现。 二、功能说明: 1、本示例用来实现单个应用程序的自身升级 2、程序启动时,连接tomcat7 web服务器进行版本的检测,若有新版本则提示更新 3、将从web服务器下载的新版本的APK文件放到sdcard中 4、监听新版本的APK应用是否安装完成,如果是,则将下载的apk文件从sdcard中删除 三、程序框架流程:

四、环境说明: 1、服务器端:Ubuntu下的tomcat7web服务器,安装后默认端口是8080,Android模拟器访问时要将apk文件放到/var/lib/tomcat7/webapps/ROOT/目录下,Android模拟器的访问方式是http://10.0.2.2/NewAppSample.apk 2、Android模拟器端的开发环境: Ubuntu+eclipse+ADT 五、流程详解及关键点说明: (一) 新版本的应用程序(NewAppSample)准备: a) 新建一个android工程,编辑其版本代码为2,高于我们的旧版本用于更新测试,版本名称为1.0.1 b) 编辑应用程序对应的版本信息文件version.json 说明:后缀为json的文件是一种轻量级的数据交换格式,比xml要快很多,适合于小型数据的网络交换,其实质类似键值对,键用字符串的形式表示与其值用冒号隔开,能存储多种数据类型。 (二) 旧版本的应用程序准备: 1、在其AndroidManifest.xml中定义版本代码为versionCode=”1”让其自动生成即可,我们主要利用程序的版本代码的高低来判断是否有新的版本,用于更新。 2、我们在应用程序启动时自动联网检测是否有新的版本,即在onCreate()函数中进行联网检测。 a) 从服务器获得读取版本信息文件version.json,我们单独写了一个类来实现,用其GetUpdateInfo静态方法来返回读取的version.json,返回形式是字符串。代码如下

用C#开发软件自动更新程序

用C#实现在线升级的关键步骤 这里我主要使用日期信息来检测是否需要下载升级版本。 4.1 准备一个XML配置文件 名称为AutoUpdater.xml,作用是作为一个升级用的模板,显示需要升级的信息。 名称为AutoUpdater.xml,作用是作为一个升级用的模板,显示需要升级的信息。 //xml版本号 //升级文件所在服务器端的网址 //升级文件的更新日期 //升级文件的版本号 //升级文件列表 //共有三个文件需升级 //允许重新启动应用程序 //启动的应用程序名 从以上XML文档中可以得知升级文档所在服务器端的地址、升级文档的更新日期、需要升级的文件列表,其中共有三个文件需升级:aa.txt、VB40.rar、VB4-1.CAB。以及是否允许重新启动应用程序和重新启动的应用程序名。 4.2 获取客户端应用程序及服务器端升级程序的最近一次更新日期 通过GetTheLastUpdateTime()函数来实现。 private string GetTheLastUpdateTime(string Dir) { string LastUpdateTime = ""; string AutoUpdaterFileName = Dir + @"\AutoUpdater.xml"; if(!File.Exists(AutoUpdaterFileName)) return LastUpdateTime; //打开xml文件 FileStream myFile = new FileStream(AutoUpdaterFileName,FileMode.Open); //xml文件阅读器 XmlTextReader xml = new XmlTextReader(myFile); while(xml.Read()) { if(https://www.wendangku.net/doc/8d7731770.html, == "UpdateTime") {

一、数字签名说明

附件2 中债综合业务平台客户端数字签名说明 可信代码数字签名证书可以保证您的软件是完整的、安全的(即可信任的)。为了保障您所下载的中债综合业务平台客户端安装程序未受病毒或木马的侵害,我公司已对安装程序及运行程序启用数字签名证书,并在版本安装和使用时进行明确的提示。(以下以“中债综合业务平台网上客户端”为例说明)。 一、数字签名说明 1.在已下载的安装程序上点击右键,选择“属性”;

2.选择“数字签名”标签,可看到该文件由中央国债登记结算有限责任签名。

3.点击“详细信息”,如软件未被改动,则证书的状态为“此数字签名正常”。 4.点击“查看证书”,可看到证书相关信息。

至此,可确认您下载的安装程序是可信任的,请放心进行安装和使用。 5.如果文件被非法篡改,分为两种情况 第一种:如果是WindowsXP系统,则在文件属性里,“数字签名”一栏仍显示该文件有签名,但详细信息里会提示“该数 字签名无效”,查看证书里会提示“没有验证对象的数字签名”。

第二种:如果是Windows7以上的系统,则在文件属性里看不到“数字签名”一栏. 一旦遇到以上这两种情况,请立即删除安装程序并重新下载,然后重复以上的验证步骤。 二、安装过程及客户端打开过程操作提示 1.Windows系统弹出的用户帐户控制窗口。 在Windows7及以上版本的系统中,如果将控制面板中的“用户帐户控制设置”设定为“始终通知”或“仅在程序尝试对我的计算机进行更改时通知我”,则会在运行安装程序时,弹出操作系统UAC提示对话框,此时点击“是”即可

继续进行安装操作。 2.打开客户端时可能遇到的安全警告。 在启动中债综合业务平台客户端时,如果用户的组策略—用户配置—管理模板—Windows组件—附件管理器中的高风险文件类型的包含列表是开启状态,会弹出安全警告对话框,此时点击“运行”即可继续启动打开客户端程序。

软件自动更新技术

软件自动更新思路 时间:2011-06-03 03:17:54 来源:作者:中原石油勘探局地质录井处付全彬 1前言 长期以来,广大程序员为到底是使用Client/Server,还是使用Browser/Server结构争论不休,在这些争论当中,C/S结构的程序可维护性差,布置困难,升级不方便,维护成本高就是一个相当重要的因素。有很多企业用户就是因为这个原因而放弃使用C/S。然而当一个应用必须要使用C/S结构才能很好的实现其功能的时候,我们该如何解决客户端的部署与自动升级问题?部署很简单,只要点击安装程序即可,难的在于每当有新版本发布时,能够实现自动升级。我们希望开发一个与具体应用无关的能够复用的自动升级系统。下面结合工作中所承担的井场数据中心项目为大家介绍如何实现可复用的自动升级系统。 2软件自动升级存在的困难 第一,为了查找远程服务器上的更新,应用程序必须有查询网络的途径,这需要网络编程、简单的应用程序与服务器通讯的协议。 第二是下载。下载看起来不需要考虑联网的问题,但要考虑下载用户请求的文件,以及在没有用户同意时下载大文件。友好的自动更新应用程序将使用剩余的带宽下载更新。这听起来简单,但却是一个技术难题,幸运的是已经有了解决方法。 第三个考虑因素是使用新版应用程序更换原应用程序的过程。这个问题比较有趣,因为它要求代码运行时将自己从系统删除,有多种办法可以实现该功能,本文程序主要通过比较新旧版本的日期号来实现替换新版本应用程序的功能。 3软件自动在线升级的原理 写两个程序,一个是主程序;一个是升级程序;所有升级任务都由升级程序完成。 3.1.启动升级程序,升级程序连接到网站,下载新的主程序(当然还包括支持的库文件、XML配置文档等)到临时文件夹; 3.2.升级程序获取服务器端XML配置文件中新版本程序的更新日期或版本号或文件大小; 3.3.升级程序获取原有客户端应用程序的最近一次更新日期或版本号或文件大小,两者进行比较;如果发现升级程序的日期大于原有程序的最新日期,则提示用户是否升级;或者是采用将现有版本与最新版本作比较,发现最新的则提示用户是否升级;也有人用其它属性如文件大小进行比较,发现升级程序的文件大小大于旧版本的程序的大小则提示用户升级。本文主要采用比较新旧版本更新日期号来提示用户升级。 3.4.如果用户选择升级,则获取下载文件列表,开始进行批量下载文档; 3.5.升级程序检测旧的主程序是否活动,若活动则关闭旧的主程序; 3.6.删除旧的主程序,拷贝临时文件夹中的文件到相应的位置; 3.7.检查主程序的状态,若状态为活动的,则启动新的主程序; 3.8.关闭升级程序,升级完成。 4实现在线升级的关键步骤 这里我主要使用日期信息来检测是否需要下载升级版本。 4.1 准备一个XML配置文件 名称为AutoUpdater.xml,作用是作为一个升级用的模板,显示需要升级的信息。 //xml版本号 <AutoUpdater> <URLAddres URL="http://192.168.198.113/vbroker/log/"/>//升级文件所在服务器端的网址

WSUS客户端补丁自动更新配置

在办公电脑上配置自动更新因为有部分电脑启用自动更新服务会出现错误。 所以我将排错步骤一起写进配置文档里。 第一步,在“运行”里输入 %windir% 找到微软补丁服务的文件夹 找到Softwaredistribution这个文件夹,将它删除掉。 如果直接删除,可能会提示有程序正在使用它。

删除Softwaredistribution文件夹的方法如下:以管理员的身份启动命令行管理器。 位置:开始-->程序-->附件-->命令提示符 右键点击,选择“以管理员身份运行”

使用net stop wuauserv 命令将更新服务程序停止掉。 然后就可以删除掉Softwaredistribution文件夹。 之后,在使用net start wuauserv 命令启动更新服务程序。 然后还需要确定一次windows update 这个服务是否已经启动了。在“运行”里输入 services.msc 进行查看 如果没有启动,就讲它启动起来。

到这里,准备步骤就已经完毕。 现在,开始配置每一台需要更新的机器的关键部分。指定WSUS更新服务器的IP。并设置自动更新和安装。在“运行”里输入gpedit.msc进入组策略管理。

找到:“管理模板”-->“Windows组件”-->“Windows Update”“双击鼠标左键”打开它 接下来是重要的配置步骤: 以上用箭头标注的六个地方需要配置。 启用“配置自动更新”,并选择“自动下载并计划安装” 安装时间,可以根据实际当前电脑开机的时段进行配置。

启用“指定Intranet Microsoft更新服务位置” 配置WSUS服务器IP地址 格式为 X.X.X.X 这个地址更具实际情况进行配置,每个网段的电脑配置IP会不一样。

IOS开发中证书、签名、私钥、描述文件概述

IOS证书/私钥/代码签名/描述文件 SURFSKY-2012-10 1.相关资源 (1)钥匙串程序(常用工具->钥匙串),用于创建证书请求、安装证书、导出私钥等 (2)IOS开发中心:https://d evel oper.appl https://www.wendangku.net/doc/8d7731770.html,/d evcenter/ios/ind ex.action (3)IOS描述门户(IOS provisioning Portal),在此配置证书、描述文件、推送服务等:https://d eveloper.appl https://www.wendangku.net/doc/8d7731770.html,/ios/manage/overview/ind ex.action, (4)IOS程序发布:http://itunesconnect.appl https://www.wendangku.net/doc/8d7731770.html,/ 2.证书、签名、私钥、描述文件的一句话描述 (1)证书分两种:开发者证书、发布者证书。前者开发时使用,后者发布使用 (2)模拟器调试无需代码签名;真机调试需开发者证书代码签名;发布时需发布证书签名 (3)代码签名需要:证书+私钥,缺一不可,详见4 (4)真机调试时要求在设备上安装描述文件(provision profile),该文件包含信息:调试者证书,授权调试设备清单,应用ID。一个应用对应一个描述文件。 (5)一般情况下,xcod e需要做以下代码签名配置: 3. XCODE代码签名简要步骤 (1)用钥匙串程序创建证书请求:证书请求文件(*.certSigningRequest),私钥,公钥。 (2)将证书请求文件发送给appl e,后者将创建一个证书文件(*.cer)给你。 (3)xcod e将使用证书文件和对应的私钥给代码签名。 注:私钥可导出为p12文件拷贝他人使用,详见下节。

VC++ 6.0 MFC 俄罗斯方块 自动求解 代码 源程序

#include #include #include #include #define tDown 1 //方块下落定时器的标识(编号) #define tPaint 2 //重绘定时器的标识(编号) #define tDownTime 500 //方块下落一行位置的时间间隔 #define tPaintTime 50 //窗口重绘的时间间隔 #define ROW 24 //地图的行数目(第23行不用) #define COL 14 //地图的列数目(第0列和第13列不用) #define MAX_CLASS 7 //方块形状数目 #define LEN 20 //每个方格大小为20×20像素 #define StartY -1 * LEN + 5 //-15,绘制俄罗斯方块地图时的边界起始位置#define StartX -1 * LEN + 5 //-15 int iDeleteRows = 0; //总共清除的行 int iTotalNum = 0; //总得分 char WindowTxt[100] = "俄罗斯方块游戏自动求解已关闭"; //窗口标题 char s1[] = "关闭", s2[] = "启动"; //用于启动/关闭自动求解功能时显示不同的标题

bool bAuto; //是否自动求解的标志 bool Pause; //是否暂停的标志 int Map[ROW][COL]; //俄罗斯方块的地图(被占据的方格为1,否则为0) int CurrentBox[4][4]; //当前落下的方块 int CurrentY, CurrentX; //当前落下方块的当前位置(指左上角位置) int NextBox[4][4]; //下一个将落下的方块 int Box[MAX_CLASS][4][4] = //7种方块形状 { { {0,0,0,0}, {1,1,1,1}, {0,0,0,0}, {0,0,0,0} }, { {0,0,0,0}, {0,1,0,0}, {1,1,1,0}, {0,0,0,0} }, { {0,0,0,0}, {1,1,0,0}, {0,1,1,0}, {0,0,0,0} }, { {0,0,0,0}, {0,1,1,0}, {1,1,0,0}, {0,0,0,0} }, { {0,1,1,0}, {0,0,1,0}, {0,0,1,0}, {0,0,0,0} }, { {0,1,1,0}, {0,1,0,0}, {0,1,0,0}, {0,0,0,0}

API实现程序自动升级

社区彩票 社区农场 社区赌场 社区法院 社区房产 社区股市 欢迎大家到这个网上的共同的家园交流你的思想、分享你的经验!收藏本页 联系我们 论坛帮助 redbridge 重登录隐身用户控制面板搜索风格论坛状态论坛展区社区设施社区服务退出 >> PowerBuilder编程技术与相关应用我的收件箱 (0) 程序员家园论坛→软件开发→ PowerBuilder → [转帖]使用PB调用API自动更新(非FTP模式) 您是本帖的第 12 个阅读者 * 贴子主题:[转帖]使用PB调用API自动更新(非FTP模式) hongjuan 头衔:菜鸟协会会长 等级:管理员 威望:1 文章:35158 积分:44536 魅力:34850 现金:18265 存款:11106 门派:足彩协会 住址:幸福之家21号 注册:2003-12-31 鲜花(0) 鸡蛋(0) 楼主 [转帖]使用PB调用API自动更新(非FTP模式)

一、STRUCTURE定义 1、s_filetime global type s_filetime from structure long dwlowdatetime long dwhighdatetime end type 2、s_win32_find_data global type s_win32_find_data from structure long dwfileattributes s_filetime ftcreationtime s_filetime ftlastaccesstime s_filetime ftlastwritetime long nfilesizehigh long nfilesizelow long dwreserved0 long dwreserved1 character cfilename[255] character calternatefilename[14] end type 3、s_netresource global type s_netresource from structure long dwScope long dwType long dwDisplayType long dwUsage string lpLocalName string lpRemoteName string lpComment string lpProvider end type 一、WNetAddConnection2A function ulong WNetAddConnection2A(ref s_netresource lpNetResource, String lpPassword, String lpUserName, long dwFlags) library "mpr.dll" Alias for "WNetAddConnection2A" 说明: VB声明 Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" (lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Long) As Long

WSUS客户端补丁自动更新配置

在办公电脑上配置自动更新 因为有部分电脑启用自动更新服务会出现错误。 所以我将排错步骤一起写进配置文档里。 第一步,在“运行”里输入%windir% 找到微软补丁服务的文件夹 找到Softwaredistribution这个文件夹,将它删除掉。 如果直接删除,可能会提示有程序正在使用它。 删除Softwaredistribution文件夹的方法如下: 以管理员的身份启动命令行管理器。

位置:开始-->程序-->附件-->命令提示符 右键点击,选择“以管理员身份运行” 使用net stop wuauserv 命令将更新服务程序停止掉。 然后就可以删除掉Softwaredistribution文件夹。 之后,在使用net start wuauserv 命令启动更新服务程序。 然后还需要确定一次windows update 这个服务是否已经启动了。

在“运行”里输入services.msc 进行查看 如果没有启动,就讲它启动起来。 到这里,准备步骤就已经完毕。 现在,开始配置每一台需要更新的机器的关键部分。 指定WSUS更新服务器的IP。并设置自动更新和安装。 在“运行”里输入gpedit.msc进入组策略管理。 找到:“管理模板”-->“Windows组件”-->“Windows Update”“双击鼠标左键”打开它

接下来是重要的配置步骤: 以上用箭头标注的六个地方需要配置。 启用“配置自动更新”,并选择“自动下载并计划安装”安装时间,可以根据实际当前电脑开机的时段进行配置。 启用“指定Intranet Microsoft更新服务位置”

代码数字签名

一、概述 数字证书又称为数字标识(Digital Certificate,Digital ID)。它提供了一种在Internet 上进行身份验证的方式,是用来标志和证明网络通信双方身份的数字信息文件,与司机驾照或日常生活中的身份证相似。在网上进行电子商务活动时,交易双方需要使用数字证书来表明自己的身份,并使用数字证书来进行有关的交易操作。通俗地讲,数字证书就是个人或单位在Internet 的身份证。 数字证书主要包括三方面的内容:证书所有者的信息、证书所有者的公开密钥和证书颁发机构的签名。 一个标准的X.509 数字证书包含(但不限于)以下内容: 证书的版本信息; 证书的序列号,每个证书都有一个唯一的证书序列号; 证书所使用的签名算法; 证书的发行机构名称(命名规则一般采用X.500 格式)及其私钥的签名; 证书的有效期; 证书使用者的名称及其公钥的信息。 在使用数字证书的过程中应用公开密钥加密技术,建立起一套严密的身份认证系统,实现: 除发送方和接收方外信息不被其他人窃取; 信息在传输过程中不被篡改; 接收方能够通过数字证书来确认发送方的身份; 发送方对于自己发送的信息不能抵赖。 代码签名证书主要颁发给软件开发商,用户在下栽、使用软件代码时,证书将证明软件代码的来源、完整性等信息,主要功能是让用户知道该软件代码是安全的并且没有被篡改过,用户可以安全地进行下载、使用。本业务支持Microsoft Authenticode Techology、Netscape Object Signing、Ms Office 2000/VBA Macro Signing 等代码签名技术。 二、使用代码签名证书 在获得数字证书之前,您必须向一个合法的认证机构(例如:广东省电子商务认证中心)提交证书申请。您需要填写书面的申请表格(试用型数字证书除外),向认证中心的证书申请审核机构(例如:广东省电子商务认证中心的代理点)提交相关的身份证明材料(如身份证、营业执照副本、组织机构代码证等)以供审核。当您的申请通过审核并且交纳相关的费用后,证书申请审核机构会向您返回证书业务受理号和证书下载密码。您通过这个证书业务受理号及下载密码,就可以到认证机构的网站上下载和安装证书了。 详细的证书申请与安装指南请参考https://www.wendangku.net/doc/8d7731770.html, 上“客户服务区”->“操作指南”->“使用手册”上的相关内容。 以下是微软的代码签名控件的使用说明。详细的操作指南请参考微软提供的代码签名控件的广东省电子商务认证中心证书应用指南(codesign)说明文档。 2.1 利用证书对代码进行签名 2.1.1 第一步:下载微软的控件 在使用代码签名证书对程序员编写的程序代码进行签名之前,请到微软的网站上上下载代码签名的工具。 根据用户不同的环境要求,根据以下链接下载相对应驱动程序:

资料WindowsUpdate自动更新错误代码大全

【资料】Windows Update 自动更新错误代码大全 在使用Windows Update更新时,时常会遇到过这样的情况:“升级没有成功,只给出一段不知其意的代码如“XXXXXX”!让人无从下手,特将这些错误提示的代码的整理出来供大家参考! Windows Update 错误51F 如果在尝试安装更新时收到Windows Update 错误51F,则Microsoft Office 2003 产品的本地安装源(LIS) 已损坏。LIS 是Office 2003 产品用来安装程序和Office 程序更新的软件。 Windows Update 错误52F

如果在尝试安装更新时收到Windows Update 错误52F,说明Microsoft Office 2003 产品的本地安装源(LIS) 已损坏。LIS 是Office 2003 产品用来安装程序和Office 程序更新的软件。 Windows Update 错误80070070 如果在尝试安装更新时收到Windows Update 错误80070070,请释放计算机上的磁盘空间,然后重新尝试。 Windows Update 错误80070002 如果在检查更新时收到Windows Update 错误80070002,需要删除Windows 用于确定计算机更新的临时更新文件。若要删除这些文件,请完成下面的所有步骤,然后重新尝试检查Windows 更新。 Windows Update 错误80070003 如果在检查更新时收到Windows Update 错误80070003,则需要删除Windows 用于识别计算机更新的临时文件。若要删除这些临时文件,请完成下面的所有步骤,然后重新尝试检查Windows 更新。 Windows Update 错误80070422 如果在下载更新时收到Windows Update 错误80070422,可能需要更改Windows

客户端常见问题及解决办法

客户端常见问题及解决办法 客户端简介: 宽带认证客户端是由北京城市热点公司开发的宽带接入认证程序。主要用于高校,企业,或者其他局域网上网认证,以及网络管理。 客户端常见问题及解决办法: 常见问题有:登陆超时失败、code(21)、账号正在使用、用户名或密码错误、本账号只能在指定ip使用、其他程序占用端口、下载的客户端安装时出现乱码、IP地址错误或网卡被禁用、网络连接受限等。 1.其他程序占用端口: 提示图 原因:你电脑中正在运行的某个应用程序占用了客户端的通信端口(客户端通信端口UDP 61440)、杀毒软件或防火墙也会引起此类问题。 解决办法:方法一.检查出现这个问题之前,你安装了什么应用软件,把这个应用软件卸载掉或者在任务管理器中停掉相应的进程;方法二.开始——运行——输入"cmd”回车——再输入"netsh winsock reset "回车然后重启电脑(前提是在XP下,或vista的特权模式下)方法三..卸载客户端——重启电脑,下载最新版本的客户端重新安装。 2.code21错误: 客户端提示图 原因:客户端程序与本机安装的防火墙有系统冲突、应用程序破坏了客户端所写的注册表信息、本机系统的协议工作状态异常也会导致code(21) 解决办法:

方法一右键点击客户端图标选择属性,在打开的属性窗口中点击 查找目标,会自动打开客户端安装的文件夹,选择文件双击。 方法二这个可以用命令netsh winsock reset 解决,前提是在XP下,或vista 的特权模式下 方法三以上使用之后还不能解决,建议用户卸载客户端——重启电脑——再安装客户端 3.登陆超时失败: 出现此类问题比较多,原因也很多, 客户端提示图 原因及解决办法: (1)本地连接显示已经连接上,但还是上不了网,此类问题多是系统问题,用户可查看客户端登录服务器地址 是否正确,我校客户端登陆服

【IT专家】代码签名错误-应用程序codesign验证失败

本文由我司收集整编,推荐下载,如有疑问,请与我司联系 代码签名错误:应用程序codesign验证失败代码签名错误:应用程序codesign验证失败[英]Code signing Error: Application failed codesign verification I am very new to iOS development, I have an app all set and ready to be distributed, but I seem to get this error every single time I run the application on my DEVICE only, the iOS simulator works just fine. Heres the full error: ?我是iOS开发的新手,我有一个应用程序都已经设置好并准备发布,但是每次我在我的设备上运行这个应用程序,iOS模拟器就会出现这个错误。这是完整的错误: Application failed codesign verification. The signature was invalid, contains disallowed entitlements, or it was not signed with an iPhone Distribution Certificate. (-19011) ?应用程序失败的合作设计验证。签名无效,包含不允许的权利,或者没有与iPhone分发证书签署。(-19011) Here’s the entire log: ?这是整个日志: ?Validate “/Users/masonsocha/Library/Developer/Xcode/DerivedData/Multibrowser-brgeiknbjgrywwehhohafjwxjqnk/Build/Products/App Store-iphoneos/Multibrowser.app” cd /Users/masonsocha/Desktop/Apps/MultiBrowser setenv PATH “/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/us r/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin” setenv PRODUCT_TYPE com.apple.product-type.application /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr /bin/Validation “/Users/masonsocha/Library/Developer/Xcode/DerivedData/Multibrowser-brgeiknbjgrywwehhohafjwxjqnk/Build/Products/App Store-iphoneos/Multibrowser.app”warning: Application failed codesign verification. The signature was invalid, contains disallowed entitlements, or it was not signed with an iPhone Distribution Certificate. (-

源代码版本管理

目录 1 Visual Studio环境下源代码版本管理 2 Eclipse环境源代码版本管理 3体会

1Visual Studio环境下源代码版本管理 1.1SubVersion+TortoiesSVN的配置 1.1.1安装SubVersion 。(下载地址: https://www.wendangku.net/doc/8d7731770.html,/servlets/ProjectDocumentList?folderID=8100&exp andFolder=8100&folderID=91),例如我安装到D:/SVN/SubVersion 1.1.2安装TortoiseSVN。(下载地址:https://www.wendangku.net/doc/8d7731770.html,/downloads),这是一个SubVersion的图像化管理工具,没有它也可以,但是管理SubVersion需要使用命令行的形式,安装过TortoiseSVN可以在右键菜单出现相应的选项。例如我安装到了D:/SVN/TortoiseSVN 1.1.3建立版本库(repository)。这点和VSS一样,我们需要一个库来存放版本信息。创建方式有两种通过SubVersion的命令行或者通过TortoiseSVN的图形界面来创建。我们就直接通过TortoiseSVN创建,例如我想在D盘建立一个文件夹SVNServices 用来放版本库,然后在其中建立一个EMIData的文件夹作为我的项目EMI的版本库,这是我对EMIData点击右键--TortoiseSVN—Create Repository here 即可将EMIData最为一个版本库,这是你会发现EMIData文件夹中多了很多的文件。 1.1.4启动SVN服务。到这里我们的SubVersion其实还没有启动,我们在cmd命令行输入:svnserve –-daemon –-root D:/SVNServices这样我们就可以启动SVN并且以D:/SVNServices作为根目录。这里我要指明几点,第一就是输入的命令中两处都是两个‘-’,也就是‘--’而不是‘-’;第二点就是启动后cmd窗口使不能关闭的,

自动更新程序源码下载(C#.Net)=

由于微软提供的更新程序使用不方便,所以又写了此程序。此程序是本人一年前所写的一段程序,当时在开发一个CS版本报价系统,当时由于开发过程仓促,代码可能有点不是太规范此程序编译后只有一下AutoUpdate.exe文件与一个配置文件UpdateList.xml,主要通过本地程序与服务端程序文件的版本号来升级与更新本地程序文件。UpdateList.xml文件内容如下: Application autoUpdate http://10.0.5.98/SoftUpdate/ 2005-09-05 ItemSoft.exe . 1.0.0.0 说明: 程序的描述; 更新服务器地址,为一个虚拟目录或站点路径; 需要更新主程序文件,为exe; . 需要更新主程序文件所在路径; 1.0.0.0 主程序版本号; 需要更新的文件列表;Ver:文件版本号,Name:文件名,包括路径(相对); 使用时,在更新服务器上新建Web虚拟目录或站点,然后将需要更新的文件与UpdateList.xml放在上面; 本地将AutoUpdate.exe与UpdateList.xml放在主程序的根目录下。本地UpdateList.xml中的版本号如果小于服务端,自动程序会自动下载所需要更新的文件。 本人的完整.Net打包程序下载中所带的项目中,就使用了此更新程序。 源码下载:/Files/jenry/AutoUpdate.rar 二进制文件下载:/Files/jenry/bin.rar 生成配置文件UpdateList.xml工具:/Files/jenry/AULWriter1.0.rar(由whatisgood 提供,感谢!!)

系统自动更新AutoUpdate

系统自动更新分为插件更新和系统主程序更新,其中插件更新需要用户手动检查,系统主程序更新在程序启动时检查。 系统主程序更新 1.可更新除AutoUpdate.exe外的所有文件。 一般情况下不更新主程序配置文件,因为主程序配置文件里包含了用户个性化配置,如果更新主程序配置文件就会清空用户配置。 2.更新的前提条件如下: (1)需要配置IIS服务器提供Web服务,供AutoUpdate.exe从服务器上下载更 新文件。 (2)在程序中设置配置文件的路径: http://192.168.1.100/UFVideo/CSFiles/UpdateXMLFile.xml

配置文件的内容如下: 13 http://192.168.1.100//UFVideo/CSFiles/UpdateMainFiles.zip 配置文件提供了两个值一是最新的版本号13,二是更新文件的下载路径http://192.168.1.100//UFVideo/CSFiles/UpdateMainFiles.zip 3.AutoUpdate.exe的工作流程 (1)系统登录时主程序检查版本,主程序根据设置配置文件的服务器XML路径 检查比较自身版本和服务器提供版本是否一致,如果低于服务器版本就提示用户更新。 (2)用户根据提示同意更新后由主程序启动AutoUpdate.exe,并且在启动时提供三个参 数:最新的版本号、主程序名称、下载文件路径。 (3)AutoUpdate.exe启动后就开始根据提供的下载路径参数下载更新文件。(4)更新文件下载完成后解压到自身的启动目录中,完成文件更新。 (5)更新主程序配置文件中的版本号。 (6)重新启动主程序,完成更新任务。 using System; using System.Collections.Generic; using https://www.wendangku.net/doc/8d7731770.html,ponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; using DevExpress.XtraEditors; using System.Threading; using Shell32; using System.Configuration; namespace AutoUpdate { public partial class XtraFormUpdate : DevExpress.XtraEditors.XtraForm { public XtraFormUpdate(string[] agr) { InitializeComponent(); this.ShowInTaskbar = false;

Qt实现软件自动更新

前言 最近在学习Qt开发上位机,想实现一个检查更新的功能,网上搜索了 一大圈,发现实现过程都很复杂,关键是代码看不懂,所以就自己开发一种 简单的方式来实现。实现效果如下: 1.点击“检查更新”按钮,如果当前版本低于远程的版本,那么会弹出如下 窗口,提示更新,并显示远程的的版本号,更新时间,更新说明,如下图所示: 2.如果点击"去下载",那么会调用系统默认浏览器,直接创建下载任务。点击"不更新",则取消更新。 如果当前版本号和远程一致,那么会提示"已经是最新版本": 实现原理 首先在远程放置了一个文件,内容包含最新版软件的版本号、下载链接、更新时间、更新说明等,当用户点击"检查更新"时,会访问这个文件的地址,并对文件内容进行解析,得到最新的版本号、下载链接、更新时间、更新说 明等,如果版本号比当前软件的版本号高,那么弹出更新窗口。

我们先创建一个文本文件,可以是TXT格式、XML格式、JSON格式等等,因为之前学习过JSON的解析,所以这里我选择了JSON格式,当然选择其他格式也都是可以的。命名为 software_update.json,内容如下: 1.{ 2."PulseSensor": 3. { 4. "LatestVerison":"V1.1", 5. "Url":" //XXX. XXX. XXX /Demo_v1.1.exe", 6. "UpdateTime":"2019-03-31", 7. "ReleaseNote":"\n1.添加检查更新说明,包含版本号,下载链接,更 新时间,更新说明.\n2.优化“关于”界面" 8. }, 9."RGBContrl": 10. { 11. "LatestVerison":"V1.0", 12. "Url":" //***. ***.***/Demo_v1.1.exe", 13. "UpdateTime":"2019-03-30", 14. "ReleaseNote":"版本说明" 15. } 16.} 其中Url键值,是最新版软件的下载地址,然后把这个文件存放到服务器上,可以通过链接直接访问,如果有软件发布,只需要修改这个文件的内容:版本号、下载链接、更新说明、更新时间。当然,从文件内容也可以看出,支持多个软件的说明放在一起。 Qt端的实现 Qt端的实现,主要使用到了网络请求和JSON解析两个部分。 1.pro文件添加网络支持 1.# 网络请求 2.QT += network 2.添加头文件 1.//网络相关头文件 2.#include 3.#include 4.#include 5.//JSON相关头文件 6.#include 7.#include 8.#include 3.对象的定义和函数的声明 1.QNetworkAccessManager *manager; //定义网络请求对象 2.int parse_UpdateJSON(QString str); //解析数据函数的声明 3.void replyFinished(QNetworkReply *reply); //网络数据接收完成槽函数的声 明 4.QString CurVerison = "V1.1"; //定义当前软件的版本号 4.连接信号与槽 1.manager = new QNetworkAccessManager(this); //新建 QNetworkAccessManager对象

相关文档
相关文档 最新文档