Click here to Skip to main content
15,896,502 members
Articles / Desktop Programming / MFC

Target Eye Revealed: Part 1 - Target Eye's Unique AutoUpdate Mechanism

Rate me:
Please Sign up or sign in to vote.
4.99/5 (58 votes)
12 Jun 2014CPOL9 min read 126.9K   1.6K   102  
How Target Eye's Auto updating mechanism allows a silent update of an application from identifying newer versions, downloading them and running them instead of the old one
This article focuses on only one aspect of Target Eye, which is the Auto Update mechanism. This mechanism is used for silently updating the Target Eye Secret Agent whenever there is a newer version available on the server.
// TargetEye-AutoUpdate DemonstrationDlg.cpp : implementation file
// This is only a demonstration for codeproject.com, build using original parts of Target Eye's 
// source code (developed in 2000) placing this code inside a skeleton MFC Dialog based VS 2010 project
// �2000-2012 Target Eye Limited and Michael Haephrati. www.targeteye.biz

#include "stdafx.h"
#include "TargetEye-AutoUpdate Demonstration.h"
#include "TargetEye-AutoUpdate DemonstrationDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

TEOptions TE_Options; // here we hold global settings and statuses

wchar_t strRegularLocation[256];
wchar_t strTemporaryLocation[256];

// CTargetEyeAutoUpdateDemonstrationApp

BEGIN_MESSAGE_MAP(CTargetEyeAutoUpdateDemonstrationApp, CWinApp)
	ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()


// CTargetEyeAutoUpdateDemonstrationApp construction

CTargetEyeAutoUpdateDemonstrationApp::CTargetEyeAutoUpdateDemonstrationApp()
{
	// support Restart Manager
	m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;

	// TODO: add construction code here,
	// Place all significant initialization in InitInstance
}


// The one and only CTargetEyeAutoUpdateDemonstrationApp object

CTargetEyeAutoUpdateDemonstrationApp theApp;


// CTargetEyeAutoUpdateDemonstrationApp initialization

BOOL CTargetEyeAutoUpdateDemonstrationApp::InitInstance()
{
	if (__argc>1 && strcmp(__argv[0], "")) File1 = (CStringA)__argv[0];
	if (__argc>2 && strcmp(__argv[1], "")) File2 = (CStringA)__argv[1];

	// InitCommonControlsEx() is required on Windows XP if an application
	// manifest specifies use of ComCtl32.dll version 6 or later to enable
	// visual styles.  Otherwise, any window creation will fail.
	INITCOMMONCONTROLSEX InitCtrls;

	TE_Options.Version=TEGetVersion(File1); // here we keep the date/time stamp of the current verison
	TE_Init();


	InitCtrls.dwSize = sizeof(InitCtrls);
	// Set this to include all the common control classes you want to use
	// in your application.
	InitCtrls.dwICC = ICC_WIN95_CLASSES;
	InitCommonControlsEx(&InitCtrls);

	CWinApp::InitInstance();


	AfxEnableControlContainer();

	// Create the shell manager, in case the dialog contains
	// any shell tree view or shell list view controls.
	CShellManager *pShellManager = new CShellManager;

	// 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
	// Change the registry key under which our settings are stored
	// TODO: You should modify this string to be something appropriate
	// such as the name of your company or organization
	SetRegistryKey(_T("Local AppWizard-Generated Applications"));

	CTargetEyeAutoUpdateDemonstrationDlg dlg;
	m_pMainWnd = &dlg;
	INT_PTR 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
	}

	// Delete the shell manager created above.
	if (pShellManager != NULL)
	{
		delete pShellManager;
	}

	// Since the dialog has been closed, return FALSE so that we exit the
	//  application, rather than start the application's message pump.
	return FALSE;
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
CEO Secured Globe, Inc.
United States United States
Michael Haephrati is a music composer, an inventor and an expert specializes in software development and information security, who has built a unique perspective which combines technology and the end user experience. He is the author of a the book Learning C++ , which teaches C++ 20, and was published in August 2022.

He is the CEO of Secured Globe, Inc., and also active at Stack Overflow.

Read our Corporate blog or read my Personal blog.





Comments and Discussions