从今天开始2.4.0.9版本号CBox,提示检测到新的版本号,能够使用后必须更新为新版本号,提示表见下面的例子。

此次升级是强制升级。假如你选择不升级(单击窗体上的升级提示右下角“辍学button”或者右上角的“关闭”)。此时整个CBox程序都会退出,从而导致CBox没法使用。

因为是强制性的,所以没办法仅仅能升级,结果升级后,新版本号的CBox(3.0版本号)居然比2.4版本号的难用的多。并且内容也少了非常多,再就是新版本号的界面效果与2.4相比特别难看。真搞不懂,央视做CBox请的是哪家公司,居然把CBox做的越来越烂了,审美观念严重有问题,更别说用户体验了。2.4版本号界面与3.0的新版本号界面例如以下所看到的。

2.4版本号界面

3.0版本号界面

所以还是装回了2.4的版本号。可是启动后要强制升级啊,不升级就没法使用。于是尝试着找一些方法看时候能将CBox的升级功能给屏蔽掉。比方假设有包括版本号号的配置文件或者注冊表信息,直接将版本号号改动成最新的(或者是非常大的版本号号),可是找了半天也没找到。包括显示全部的掩藏文件以及到C:\Documents and Settings\XXXXX\Application Data\CBox文件夹都去找了。然后看了一下安装文件夹下是否有类似于Updater.exe升级exe文件,假设有直接将之删除掉,这样CBox就没发进行版本号检測了。非常不幸的是。exe也没有,倒是有一个Updater.dll动态库文件,这个文件删不得的,由于CBox.exe会依赖这个库,假设将之删除,CBox.exe启动时会报缺少Updater.dll动态库文件。

尝试到这里,依然没有办法阻止CBox的强制升级。是不是没有办法了呢?细致的看了一下,弹出的提示框是非模态的。主窗体还是能操作的。

于是想到一个略微麻烦一点的办法。既然你能捕捉到用户点击关闭和退出的事件,那么我是不是能够尝试一下得到升级提示窗体的句柄。直接将提示窗体销毁掉,从而使之不影响CBox的使用呢?于是用VC自带的Spy++工具抓到了升级窗体的类名(UpdateWindow)和标题名(Update),那么我能够调用系统API函数EnumWindows。枚举一下当前的全部的窗体,与升级提示窗体的类名及标题名比对,假设同样的话。相应的句柄就是升级提示窗体的句柄。直接给这个句柄发送WM_CLOSE消息,直接将之关闭掉。

代码写好后測试了一下,果然能够达到我们想要的效果,升级提示窗体销毁了,主窗体能够正常的使用。相关的代码例如以下所看到的:

BOOL CALLBACK EnumWindowsProc(
HWND hwnd, // handle to parent window
LPARAM lParam // application-defined value
)
{
TCHAR achClassName[MAX_PATH] = { 0 };
::GetClassName( hwnd, achClassName, sizeof(achClassName)/sizeof(TCHAR) ); TCHAR achWndTitle[MAX_PATH] = { 0 };
::GetWindowText( hwnd, achWndTitle, sizeof(achWndTitle)/sizeof(TCHAR) ); if ( !_tcscmp( achClassName, _T("UpdateWindow") ) &&
!_tcscmp( achWndTitle, _T("Update") ) )
{
::SendMessage( hwnd, WM_CLOSE, 0, 0 );
int i = 0;
} return TRUE; } void CTestCBoxWndDlg::OnBnClickedBtnTest()
{
::EnumWindows( EnumWindowsProc, NULL );
}

这样做就略微麻烦一点。每次启动CBox后都会弹出升级提示窗体,然后我们须要启动我们的工具软件将升级提示窗体销毁掉。可是这也是没办法的办法。

再就是有时不注意点击了更新,或者别用使用了我的电脑给我更新了,这样事后我还得手动装回老版本号。无意中发现CBox安装文件夹下有个DuiLib.dll文件。哈哈,原来CBox使用duilib库实现的。而且图片文件和xml配置文件就在安装文件夹的\skin\default文件夹下。为了避免点击到更新,我们能够将提示窗体相应的update.xml中最顶层的布局的Visible属性改为false,这样尽管升级提示窗体还会显示,可是窗体仅仅有背景图片,其它的button控件的什么都不显示了,这样就不会点击到更新button的机会了。update.xml文件的内容例如以下所看到的,至改动了一个地方:

<?

xml version="1.0" encoding="utf-8"?>
<Window size="246,163" caption="0,0,0,26" roundcorner="3,3" showdirty="false" >
<Font name="微软雅黑" size="10" />
<Font name="微软雅黑" size="13" />
<Font name="微软雅黑" size="14" />
<Font name="宋体" size="13" bold="true" />
<Font name="宋体" size="12" bold="true" />
<Font name="宋体" size="12" />
<Font name="宋体" size="14" bold="true" />
<Font name="微软雅黑" size="8" />
<Default name="Edit" value="enabled="false" bordercolor="#FF000000" bordersize="1" font="8" textcolor="#FF666666"" />
<Default name="Label" value="align="left"" />
<Default name="SkinOption" value="group="skin_group" maxwidth="82" align="left" textpadding="46,0,0,0" normalimage="file='uiitem.png' source='0,0,13,13' dest='22,3,35,16'" selectedimage="file='uiitem.png' source='13,0,26,13' dest='22,3,35,16'" disabledimage="file='uiitem.png' source='26,0,39,13' dest='22,3,35,16'"" /> <VerticalLayout bkimage="update_bk.png" visible="false"> // 就改了这一个地方。加入了visible="false"
<HorizontalLayout height="30">
<Button name="btnclose11" padding="225,10,0,0" width="11" height="11" normalimage="file='pt_close.png' source='0,0,11,11'" hotimage="file='pt_close.png' source='11,0,22,11'" pushedimage="file='pt_close.png' source='22,0,33,11'"/>
</HorizontalLayout>
<HorizontalLayout name="containers" height="110" padding="0,0,0,0" bordersize="0">
<VerticalLayout name="normal">
<HorizontalLayout padding="0,5,0,0">
<Label name="lblprompt" padding="10,3,0,0" text="" align="left" textcolor="#FFFFFFFF" font="1"/>
</HorizontalLayout>
<HorizontalLayout height="45" padding="0,0,0,0">
<Progress name="pgsdownload" padding="12,3,0,0" value="50" height="18" textcolor="#FFFFFFFF" font="0" foreimage="pc_playprogressfront.png" bkimage="pc_playprogressbk.png" />
</HorizontalLayout>
</VerticalLayout>
</HorizontalLayout>
<HorizontalLayout padding="1,0,1,30" height="28">
<HorizontalLayout width="180">
<Button name="btnupdate" padding="125,0,0,5" width="48" height="18" visible="false" text="更新" textcolor="#FFA0A0A0" hottextcolor="#FFE5E5E5" disabledtextcolor="#FFA7A6AA" normalimage="buttonblack.png" hotimage="buttonblack.png" pushedimage="buttonblack.png" />
</HorizontalLayout>
<Button name="btncancel" padding="8,0,0,5" width="48" height="18" text="退出" textcolor="#FFA0A0A0" hottextcolor="#FFE5E5E5" disabledtextcolor="#FFA7A6AA" normalimage="buttonblack.png" hotimage="buttonblack.png" pushedimage="buttonblack.png" />
</HorizontalLayout>
</VerticalLayout>

最后附上关闭CBox升级提示窗体的工具软件界面:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbmx5Y2x5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

版权声明:本文博主原创文章,博客,未经同意不得转载。

如何关闭CBox(2.4版本号)强制升级的形式的更多相关文章

  1. Android应用程序版本号管理(官方文档中文版)

    在应用程序的 升级/维护 策略中, 版本是一个关键的组成部分. 用户需要了解在他们的设备上所安装的应用程序的版本的特定信息, 以及已安装程序的升级版本可用的情况. 其他应用程序 - 作为同一个套件中发 ...

  2. ClickOnce部署

    (1):一些发布方式 ClickOnce是什么玩意儿,这个问题嘛,在21世纪的互联网严重发达的时代,估计也没有必要大费奏章去介绍了,弄不好的话,还有抄袭之嫌.因此,有关ClickOnce的介绍,各位朋 ...

  3. ClickOnce部署(1):一些发布方式

    ClickOnce是什么玩意儿,这个问题嘛,在21世纪的互联网严重发达的时代,估计也没有必要大费奏章去介绍了,弄不好的话,还有抄袭之嫌.因此,有关ClickOnce的介绍,各位朋友可以直接查找MSDN ...

  4. 转 用C API 操作MySQL数据库

    用C API 操作MySQL数据库 参考MYSQL的帮助文档整理 这里归纳了C API可使用的函数,并在下一节详细介绍了它们.请参见25.2.3节,“C API函数描述”. 函数 描述 mysql_a ...

  5. mysql5.5手册读书日记(4)

    <?php /* InnoDB事务模型和锁定 15.2.10.1. InnoDB锁定模式 15.2.10.2. InnoDB和AUTOCOMMIT 15.2.10.3. InnoDB和TRANS ...

  6. Mysql个人语句笔记

    --一些简单语句记录: /*mysql*/SHOW DATABASES CREATE DATABASE guoDROP DATABASE guo /*查看创建的数据库*/SHOW CREATE DAT ...

  7. winform/wpf 程序部署

    (1):一些发布方式 ClickOnce是什么玩意儿,这个问题嘛,在21世纪的互联网严重发达的时代,估计也没有必要大费奏章去介绍了,弄不好的话,还有抄袭之嫌.因此,有关ClickOnce的介绍,各位朋 ...

  8. api-gateway实践(07)新服务网关 - 手动发布

    应用地址:http://10.110.20.191:8080/api-gateway-engine/ 一.准备工作 1.xshell登陆云主机 1.1.配置链接 1.2.链接成功 1.3.关闭防火墙 ...

  9. 一个成功的 Git 分支模型(适用于商业应用开发)

    在这篇文章中,我将推广一下大约一年前我介绍过的一些项目(公私皆有)中使用的开发模型,它们的结果都非常成功.有段时间我非常想写出来分享一下,但是我至今才抽出时间来.我不会言及任何项目细节,仅讨论分支策略 ...

随机推荐

  1. 从零開始学android&lt;RelativeLayout相对布局.十六.&gt;

    相对布局管理器指的是參考某一其它控件进行摆放,能够通过控制,将组件摆放在一个指定參考组件的上.下.左.右等位置,这些能够直接通过各个组件提供的属性完毕. 以下介绍一下各个方法的基本使用 No. 属性名 ...

  2. sql dateDiff函数

    当月的数据select * from MOPICK where dateDiff(m,getdate(),START_DATE)=0

  3. 什么是“Bash”破绽?

    摘要:近来的linux系统出现"Bash"漏洞可以被认为是第一个互联网造成安全讨论和思考.错的资料. 什么是"Bash"漏洞?它是怎样工作的?它是否可以成为新的 ...

  4. Thinkphp编辑器扩展类kindeditor用法

    一, 使用前的准备. 使用前请确认你已经建立好了一个Thinkphp站点项目. 1,Keditor.class.php和JSON.class.php 是编辑器扩展类文件,将他们拷贝到你的站点项目的Th ...

  5. 返璞归真 asp.net mvc (3) - Controller/Action

    原文:返璞归真 asp.net mvc (3) - Controller/Action [索引页] [源码下载] 返璞归真 asp.net mvc (3) - Controller/Action 作者 ...

  6. 【Java 之 JVM】Java内存结构概述

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWl3dXpoaWxpbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  7. 自己主动机串标:Directed Acyclic Word Graph

    trie -- suffix tree -- suffix automa 有这么几个情况: 用户输入即时响应AJAX搜索框, 显示候选名单. 搜索引擎keyword统计数量. 后缀树(Suffix T ...

  8. HDU 4333 Revolving Digits 扩张KMP

    标题来源:HDU 4333 Revolving Digits 意甲冠军:求一个数字环路移动少于不同数量 等同 于的数字 思路:扩展KMP求出S[i..j]等于S[0..j-i]的最长前缀 推断 nex ...

  9. linux权限和ntfs知识文件系统权限

    左右ntfs权限的问题 文件权限: [-dcbps][u:rwx][g:rwx][a:rwx] 当中: r=4, w=2, x=1,  u=owner, g=group, a=all user     ...

  10. ssh: connect to host github.com port 22: Connection refused

    假设git例如,下面的问题时,远程推送: [fulinux@ubuntu learngit]$ git push -u origin master ssh: connect to host githu ...