风神

悟空。。。。。。。。。
posts - 5, comments - 6, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2008年12月16日

以前做了个自动更新程序,后来把这个自动更新程序更新了,但是当时没有设计让自动更新程序来更新自己,这次就把这个功能加到里面了。在添加这个功能的时候,在网上搜了一下,已经有很多这方面的资料,我最后用了批处理来完成的。
设计思路:
1.自动更新程序检测到网上有新版本的自己时,先从网上下载新版本程序到同一个目录下,另起个名字保存。
2.在自动更新程序退出时,创建并运行一个批处理文件,来完成以旧换新的功能。

下面是相关的实现部分

 1 bool CAutoUpdateDlg::DeleteMyself(void)
 2 {
 3     //1.创建自己批处理文件
 4     CString sbatName,sPath;
 5     sPath=m_strAppPath+m_strAppName;
 6     sbatName=m_strAppPath+"delete.bat";
 7     ofstream outfile(sbatName.GetBuffer());
 8     if(outfile)
 9     {
10         outfile<<":try"<<endl; //定义标记
11         outfile<<"choice /t 1 /d y >nul"<<endl; //暂停1秒
12         outfile<<"del \""+sPath+"\""<<endl; //删除原程序文件
13         outfile<<"if exist \""+sPath+"\""+" goto :try"<<endl; //如果删除失败,运行到标记try处,循环以上步骤
14         outfile<<"rename "+m_strAppBakName+" "+m_strAppName<<endl; //重命名新文件为程序文件
15         outfile<<"del \""+sbatName+"\""//删除批处理文件
16     }
17     outfile.close();
18 
19     //2.创建运行批处理的进程,它以空闲优先级创建
20     STARTUPINFO si;
21     PROCESS_INFORMATION pi;
22     ZeroMemory( &si, sizeof(si) );
23     si.cb = sizeof(si);
24     si.dwFlags=STARTF_USESHOWWINDOW;
25     si.wShowWindow=SW_HIDE; //以隐藏状态运行
26     ZeroMemory( &pi, sizeof(pi) );
27     if!CreateProcess( NULL, // No module name (use command line). 
28         sbatName.GetBuffer(), // Command line. 
29         NULL,             // Process handle not inheritable. 
30         NULL,             // Thread handle not inheritable. 
31         FALSE,            // Set handle inheritance to FALSE. 
32         IDLE_PRIORITY_CLASS,                // IDLE flags. 
33         NULL,             // Use parent's environment block. 
34         NULL,             // Use parent's starting directory. 
35         &si,              // Pointer to STARTUPINFO structure.
36         &pi )             // Pointer to PROCESS_INFORMATION structure.
37         ) 
38     {        
39         CloseHandle(pi.hThread);
40         CloseHandle(pi.hProcess);
41         return false;
42     }
43     return true;
44 }

程序经过我的一番测试,暂时没有出现不良反应。希望对有这方面需求的朋友能有所借鉴,程序写的比较简单,如果有什么改进的地方或是有更好的办法,希望能及时的告知,谢谢。

posted @ 2008-12-16 17:56 风神 阅读(2467) | 评论 (2)编辑 收藏

2008年5月30日

网博士(Websaver)是一款免费软件,让您方便地将瞬息多变的Web信息永久保存,它内建强大的信息收集、信息浏览、信息编辑、全文搜索、信息共享等功能。它非常适合于程序员、研究者、学生、信息专家、以及以互联网作为主要信息来源的网上阅读者和信息搜集者。很多人听到免费就不以为然了,接下来会想免费的软件功能一定不怎么样。如果大家这么想,这回可就大错特错了。网博士的功能和同类软件譬如‘网文快捕’(收费软件)来比,一点都不逊色。下来就让我给大家说说网博士都可以为我们干什么。
    1.安装好网博士后,IE右键菜单中就多了两个选项“网博士保存网页”和“网博士保存选中部分”,当我们看到有用的资料或网页想保存时就可以通过IE右键菜单这两个选项来保存资料或网页到本地了,以后要看的话就不用再去苦苦寻找了。
    2.对保存的网文、资料我们还可以就行编辑。如果觉得保存的网文样式不美观或者想去掉网页里面不需要的地方(比如广告)可以就地进行编辑。
    3.网博士还有内置的制作电子书的功能。精心收集的信息当然希望与朋友分享或在办公室与家里之间拷贝,由于网页默认都是保存在网博士书籍中的,如果对方也安装了网博士您只需要把相关书籍发给朋友即可,如果朋友还未安装网博士或需要从书籍中提取部分信息,那就需要使用我们精心为林准备的“导出”功能了。导出功能可以把保存在网博士中的信息导出为普通的网页文件或流行的微软CHM文件,他们可以在任何一台安装了IE浏览器的机器上查看,以导出CHM文件为例,导出步骤如下:

1. 在目录树中选中您需要导出的文件或文件夹节点
2. 选择网博士菜单:文件-〉导出-〉导出为CHM文件
3. 在弹出的对话框中选择“保存位置”,确认即可。

    还有很多贴心的功能需要我们自己去体验,我就不一一介绍了。软件好,还要有人来用,这样软件的好处就不至于埋没了。推荐大家都来试一试吧,当你在使用了该软件后,如果一定要感谢的话,就感想作者吧。网博士许可个人免费使用, 如果你正在享受网博士带给你的方便, 希望能捐助开发团队以使网博士能更好地发展。

    目前网博士最新版本是3.50(B270) 可以去官方网站www.citom.com 去下载最新版本。

posted @ 2008-05-30 15:35 风神 阅读(736) | 评论 (0)编辑 收藏

2008年5月29日

从5.12号大地震过后,这每天余震不断,地球真是能量无穷啊,这丫还震上瘾了。对地球来说,也就是小小的动作,但对人类来说,可是灭顶之灾啊。地球这么闹腾,我觉得一定有原因。我们是不是该反思下,不是有'蝴蝶效应'吗,万事万物的变化运动都有联系,也许人类自己对地球不爱护造成的吧。反思中.....

ps.临震胡言,不知所云,敬请谅解!

posted @ 2008-05-29 11:45 风神 阅读(393) | 评论 (0)编辑 收藏

博客界面等都比较干净简洁,让人感觉神清气爽。功能也挺全面,写博文觉得很顺手,但是发现了一处让我感觉不好的地方,就是题为c++博客,但是我在其中插入程序代码时,却找不到c++代码的着色选项,最后只好用c#的,这点不好!也许是我第一次用,不会用吧,如果有解决的办法望看到的朋友告知下。

posted @ 2008-05-29 10:45 风神 阅读(534) | 评论 (3)编辑 收藏

在VC中,基于MFC框架的应用程序由模板生成时,已经自动添加了内存泄漏自动检测功能。当你的程序有内存泄漏,在Debug调式模式下运行就会在vc的输出窗口里显示出来,非常方便我检查程序漏洞。但是当我写一些测试程序时,往往喜欢用控制台程序来编写,但是控制台程序不会自动添加内存泄漏自动检测功能。我在网上搜索了下,找到了添加的方法,经过我的整理把他写出来,希望对我们都有用!

第一步:在程序里定下一下宏(建议定义在stdafx.h头文件中)

#ifdef _DEBUG
 
//for memory leak check
 #define _CRTDBG_MAP_ALLOC //使生成的内存dump包含内存块分配的具体代码为止
 #include 
<stdlib.h> 
 #include 
<crtdbg.h>
 
#define CheckMemoryLeak _CrtSetDbgFlag( _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG )| _CRTDBG_LEAK_CHECK_DF)
#endif 

第二步:在程序的入口处(就是main函数的开头)写如下语句

#ifdef _DEBUG
 CheckMemoryLeak;
#endif

经过这两步我们的控制台程序就已经可以自动检测内存泄漏了,不信?你自己试试不就知道了!:)

posted @ 2008-05-29 10:35 风神 阅读(1241) | 评论 (1)编辑 收藏