资源简介
通常软件保存用户数据无非两种方法:
1.自己建立文件保存用户数据。
2.在注册表中保存数据。
有没有可能利用软件可执行文件自身来保存数据呢?因为软件还在运行,直接修改自身是不可能的。但有一种间接的方法:先制作一个自身的副本,然后修改副本后退出。退出时运行副本,副本运行时将自身复制为主后退出。副本退出时再运行主本,此时主本再删除副本。
整个过程的关键是识别自身是主本还是副本及此次运行要执行的操作。这些可通过加命令行参数来识别。
如果副本运行时主本还未退出,则复制或删除会失败,所以要等待动作成功完成后再进行下一步。
缺点是退出到副本能运行之间有段时间的,所以窗口会闪一下。
此方法可用于软件自升级,即用下载到的新软件替换自身。
代码片段和文件信息
// Demo.cpp : Defines the class behaviors for the application.
//
#include “stdafx.h“
#include “Demo.h“
#include “DemoDlg.h“
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//*****************************************************************************
// 全局变量定义
//*****************************************************************************
char szTempFilePath[MAX_PATH]=““;
char szModulePath[MAX_PATH]=““;
/////////////////////////////////////////////////////////////////////////////
// CDemoApp
BEGIN_MESSAGE_MAP(CDemoApp CWinApp)
//{{AFX_MSG_MAP(CDemoApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG
ON_COMMAND(ID_HELP CWinApp::onhelp)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDemoApp construction
CDemoApp::CDemoApp()
{
// TODO: add construction code here
// Place all significant initialization in InitInstance
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CDemoApp object
CDemoApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CDemoApp initialization
BOOL CDemoApp::InitInstance()
{
//检查是否升级运行
if(CheckUpgrade()) return FALSE;
AfxEnableControlContainer();
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable you should remove from the following
// the specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
CDemoDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
return FALSE;
}
//*****************************************************************************
// 运行外部程序 szModule=程序路径 szParameter=运行参数 nShowCmd=显示方式
//*****************************************************************************
BOOL Execute(LPCSTR szModule LPCSTR szParameter INT nShowCmd)
{
BOOL fgRet = FALSE;
SHELLEXECUTEINFO shell;
shell.cbSize = sizeof(shell);
shell.hwnd = NULL;
shell.lpVerb = “Open“;
shell.lpFile = szModule;
shell.lpParameters = szParameter;
shell.lpDirectory = NULL;
shell.nShow = nShowCmd;
shell.fMask = SEE_MASK_NOCLOSEPROCESS;
if(ShellExecuteEx(&shell))
{
fgRet = TRUE;
//提升优先级,使命令尽快被执行
SetPriorityClass(shell.hProcess IDLE_PRIORITY_CLASS);
SetPriorityClass(GetCurrentProcess() REALTIME_PRIORITY_CLASS);
SetThreadPriority(G
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 20808 2013-03-23 15:40 Demo\Demo.aps
文件 1122 2013-03-23 15:40 Demo\Demo.clw
文件 4594 2013-03-23 15:29 Demo\Demo.cpp
文件 4127 2013-03-23 10:39 Demo\Demo.dsp
文件 514 2013-03-23 10:18 Demo\Demo.dsw
文件 2301 2013-03-23 15:15 Demo\Demo.h
文件 66560 2013-03-23 15:40 Demo\Demo.ncb
文件 3092 2013-03-23 15:38 Demo\Demo.plg
文件 5286 2013-03-23 10:52 Demo\Demo.rc
文件 5499 2013-03-23 15:36 Demo\DemoDlg.cpp
文件 1351 2013-03-23 15:19 Demo\DemoDlg.h
文件 3543 2013-03-23 10:18 Demo\ReadMe.txt
文件 728 2013-03-23 10:52 Demo\Resource.h
文件 206 2013-03-23 10:18 Demo\StdAfx.cpp
文件 1054 2013-03-23 14:52 Demo\StdAfx.h
文件 3122176 2013-03-23 15:38 Demo\Debug\Demo.bsc
文件 396 2013-03-23 10:18 Demo\res\Demo.rc2
文件 1078 2013-03-23 10:18 Demo\res\Demo.ico
..A.SH. 3072 2013-03-23 15:41 Demo\res\Thumbs.db
文件 50688 2013-03-23 15:40 Demo\Demo.opt
目录 0 2013-03-23 15:39 Demo\Debug
目录 0 2013-03-23 15:39 Demo\res
目录 0 2013-03-23 15:39 Demo\Release
目录 0 2013-03-23 15:39 Demo
----------- --------- ---------- ----- ----
3298195 24
相关资源
- Devexpress版本升级转换测试
- ScrapBook_网页保存浏览器插件
- DS18B20内部EEPROM保存
- 一个将图像数据保存为BMP文件的
- 运行状态强制删除文件自身
- AP6521设备升级固件刷机教程
- spark升级后无logging类
- 联想扬天M4680N升级BIOS--90KT22CUS
- STM32通过GPRS(SIM7600CE模块)进行IAP远
-
Jli
nk-v8 可升级固件 - opencv彩色图转换为灰度图并保存
- 网页拖动布局保存
- PB程序自动升级,检测版本自动更新程
- DELPHI 控制摄像头拍照,截取任意矩形
- 一款具有数据解析/波形显示/保存文件
- c的bmp图像读取保存放大缩小程序.tx
- PB8中如何保存图片
- U盘升级主版本和打补丁.txt
- 安卓蓝牙固件升级Demo
- 通达OA2013至2015.8.12升级和破解文件
- 基于LABView上位机 自动保存数据
- 以文件方式保存和恢复treeview(7KB)
- v4l2采集MJPG保存到本地
- discuzX3.2 通过url传值 保存cookie 登录接
- hp dx2818 升级 SLIC2_1
- Struts2.3.15.1版本升级到2.3.32详细流程
- SJF2440源码 源代码 官方发布VC++完整
- opencv调用摄像头并截图保存
- opengl实现多边形绘制删除和移动 有保
- delphi在线升级自动更新
评论
共有 条评论