IT讨论

短信网关 Java BCB 共享软件

  DonewsBlog  |  Donews首页  |  Donews社区  |  Donews邮箱  |  我的首页  |  联系作者  |  聚合   |  登录
  3篇文章 :: 0篇收藏:: 0篇评论:: 0个Trackbacks

文章

收藏

相册

存档


正在读取评论……


2006年06月28日

 现在流行的软件很多都有自动更新的功能,这些功能是如何实现的呢?经过实践多次,我将自己的经验和大家分享。
  首先,制作你的更新文件,有两种方法,一种是制作成RAR压缩文件,这种要求你的程序能够解压RAR文件,比较麻烦,另一种是制作成可自解压的RAR压缩文件,这种方式最好,调用方便,在用winrar制作自解压文件时注意以下几点就可以了:
  1、将“General”中的“Create SFX archive”选中。
  2、将“Advanced->SFX options->Create in the current folder”选项选中。
  3、将“Advanced->SFX options->Modes->Slient mode->Hide all 和Overwrite mode->Overwrite all files”选项选中,这样在解压的时候就不提示“选择解压路径”和“是否覆盖已经存在的文件”了。
  其次,要有一个空间放置你的更新文件和版本信息文件,你的服务器支持HTTP即可,最好有自己的虚拟主机,如果没有就找一个免费的个人空间和固定的域名就行了。
  最后,就是要让你的程序能够连接服务器取文件并解压文件。通常有两种方式,一种是就在你的程序主体中增加相关代码,实现取文件和解压文件,这种方式的弊端是如果你要更新程序的主体就会失败,因为程序已经启动,一旦要覆盖这个程序就会失败。另一种方式是再写一个专门的更新程序,在你的程序主体中调用这个更新程序,然后程序主体退出,更新程序取得文件并解压后,再启动程序主体,并退出更新程序,这样就可以避免上述问题,并且写一次更新程序,以后其它的软件都可以调用,提高代码的利用率。具体做法如下:(代码由C++ Builder 6.0写成)
  1、程序的当前目录下放置一个localver.txt的文本记录目前的程序版本信息,在程序主体中增加一个按钮、菜单、定时器或者是在程序启动时能够调用检查版本信息的代码,为了类型转换的方便,在程序中放置两个Memo控件,分别为LocalMemo和RemoteMemo,将属性中的Visible设置为false,为了获取远端服务器上的文本文件,可在程序中增加一个TidHTTP的VCL控件,检查版本信息的程序代码如下:
 TMemoryStream *Stream;
 try{
  IdHTTP1->Get("http://www.xxx.com/remotever.txt",Stream); //从远程读取版本信息
  }catch(...)
  {
    ShowMessage("检查版本失败,请稍候再试");
  }
  LocalMemo->Lines->LoadFromFile(".\\localver.txt"); //读取本地程序版本信息
  RemoteMemo->Lines->LoadFromStream(Stream);
  int localver = StrToInt(LocalMemo->Text);
  int remotever = StrToInt(RemoteMemo->Text);
  if(remotever>localver)  //远程版本大于本地版本则调用更新程序
  {
    ShellExecute(this->Handle,"open","update.exe",NULL,NULL,SW_SHOWNORMAL);//update.exe是你要写的更新程序
    Form1->Close(); //程序主体退出
  }
  else  //版本是最新版本,不用更新
  {
    ShowMessage("版本已是最新版");
  }
  delete Stream;
  2、新建一个工程,设计你的update程序。在Form1中增加一个TidHTTP控件idHTTP1,一个TMemo控件LocalMemo,属性Visible设置为false,一个TProgessBar控件ProgessBar1用来显示更新的进度,再加一个Button1按钮让用户确认更新完成,具体代码如下:
  在程序的初始化部分增加以下代码:
  TMemoryStream Stream = new TMemoryStream();
  Button1->Enabled = false;
  Stream->Clear();
  try{
  IdHTTP1->Get("http://www.xxx.com/update.rar",Stream);
  }catch(...)
  {
    ShowMessage("更新失败,请稍候再试");
    Button1->Enabled = true;
    return;
  }
  Stream->SaveToFile(".\\update.rar"); //将Stream存成本地文件
  ProgressBar1->Position  = ProgressBar1->Max;
  ShellExecute(this->Handle,"open",".\\update.exe",NULL ,NULL,SW_HIDE); //运行自解压文件
  Button1->Enabled = true;
  delete Stream;

  添加一些事件代码
  void __fastcall TForm1::IdHTTP1WorkBegin(TObject *Sender,
      TWorkMode AWorkMode, const int AWorkCountMax)
  {
    ProgressBar1->Max=AWorkCountMax-1;  //设置进度条的最大值
    ProgressBar1->Min=0;  //设置进度条的最小值
    ProgressBar1->Position=0;  //设置进度条的当前位置
  }
  void __fastcall TForm1::IdHTTP1Work(TObject *Sender, TWorkMode AWorkMode,
      const int AWorkCount)
  {
    ProgressBar1->Position = AWorkCount;  //设置进度条的当前位置
  }
  void __fastcall TForm1::Button1Click(TObject *Sender)
  {
    ShellExecute(this->Handle,"open",".\\MainProgram.exe",NULL ,NULL,SW_HIDE);//启动程序主体
    Form1->Close(); //退出程序
  }
  通过以上代码就完成了程序的更新功能,最后提醒注意的是更新文件压缩包要将localver.txt共同发布,这样程序更新以后版本信息就成了最新的,如果不发布这个文件,程序就会不断的重复更新。欢迎和我交流 QQ:1441641,网站:http://www.efuyun.com




  共享软件嵌入广告是一个维护软件作者利益的不错的方法,目前不光共享软件,很多商业软件也嵌入了广告,嵌入广告是怎样实现的呢?软件作者怎样才能控制广告的显示?经过我多次实践后得出一些心得和大家分享。(以下代码用C++ builder 和ASP实现)
  软件一旦发布出去,控制权就很难掌握在作者的手中,为了能够保证作者的利益,就不能单一的显示某一个广告,而应该动态的可以由作者控制的定时滚动显示广告,如何做到这一点?这就要作者在写代码的时候不能将广告链接代码固定在一个某一个广告上,而应该链接到自己的网站上的某个ASP或者JSP页面,ASP或者JSP页面再将广告显示出来,这样做的话,显示什么样的广告控制权就掌握在作者的手中了。比如作者要滚动显示两个广告,可以在ASP用随机数来控制或者重点推一个广告,这个由作者决定。
  在生成ASP页面以前,要先申请几个广告链接代码,可以到http://www.sharebank.com.cn网站的“网站联盟”申请几个广告链接,具体ASP关键代码如下:
<STYLE type=text/css>BODY {MARGIN-TOP: 0px; MARGIN-LEFT: 0px ;MARGIN-BOTTOM: 0px; MARGIN-RIGHT: 0px}</STYLE>
  这段代码主要是用于显示的控制,因为显示广告的地方有限,这段代码可以将网页显示的各个边距减为0,可以充分利用空间。
<%
  dim random
  RANDOMIZE
  random = INT((1+1)*RND)
%>
<% 
  if random=0 then
%>
将广告链接代码1复制到此处
<%
  else
    if random=1 then
%>
将广告链接代码2复制到此处
<%
  end if
  end if
%>
  以上代码就可以实现随机显示广告的功能,如果广告较多,还可以无限扩充下去。如果在某一段时间,作者要重点推销某一个广告,就将随机数取消,只显示一个广告即可。
  ASP页面做完后,该考虑在你的软件添加广告显示的功能了。这就需要在你的软件中留出一个地方用来显示广告,一般都是将广告显示位置定在最醒目的地方,显示广告最好用IE浏览器的控件,这样显示的内容可以很丰富,有文字、图片、GIF动画、flash等,在C++ builder或者Delphi中对应的VCL控件为TCppWebBrowser,将一个TCppWebBrowser控件拖入到你的Form中,并在程序初始化时加入以下代码:
  CppWebBrowser1->Navigate(WideString("http://www.xxxx.com/logo.asp"));
  logo.asp就是上边做的ASP页面,www.xxxx.com就是你的网站的地址。如果用户在使用你的软件时没有连上互联网,就需要显示默认的广告链接了,不然显示的就是空白或者ERROR 404的错误。具体做法是将一个广告存成静态HTML文件随软件主体一起发布,一旦用户没有连接互联网就将TCppWebBrowser指向本地硬盘,关键代码如下:
void __fastcall TForm1::CppWebBrowser1NavigateError(TObject *Sender,
      LPDISPATCH pDisp, Variant *URL, Variant *Frame, Variant *StatusCode,
      VARIANT_BOOL *Cancel)
{
  CppWebBrowser1->Navigate(WideString("c:\\你的软件的安装位置\\广告.htm")) ;
}
  为了实现滚动显示的效果,需要在程序中增加一个定时器,比如间隔10分钟更新一次广告,关键代码如下:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
CppWebBrowser1->Refresh() ;
}
  通过以上描述的方式就实现了广告的嵌入,欢迎和我交流 QQ:1441641,网站:http://www.efuyun.com,祝大家多多赚钱,共同推动共享软件事业。




    摘要: 目前基本上人人都用搜索引擎,我这里讲的不是怎么让人利用搜索引擎,而是让程序利用搜索引擎搜集网址,这有什么用?很有用!网上动辄有人叫卖网址数据库,如发布软件网址、邮件地址、论坛网址、行业网址,这些网址是怎么来的呢?不可能是人手工收集而来的,都是让程序利用搜索引擎取到的,如果您需要某类网址信息数据,就跟我来一起研究一下,非常简单。    (全文共6309字)——点击此处阅读全文