C++ 卸载程序
目的:用C++寫一個自己的卸載程序來完成程序的卸載工作,同時運(yùn)行后要刪除卸載程序本身,并刪除卸載程序所在的文件夾。
注:在程序退出的時候?qū)懮?自己的卸載代碼。
?
// FileName: Uninstall.h #pragma onceclass CUninstall { private:// Exe文件名 CString m_strExeName;// Bat文件名 CString m_strBatName;public:// exe的路徑 CString m_strExePath;// bat的路徑 CString m_strBatPath;CString m_unInstallPath;public:// 是否已經(jīng)復(fù)制到臨時文件夾bool GetState (void);// 初始化void Init (void);// 卸載程序void Uninstall (void); public:CUninstall();~CUninstall(); };
?
// FileName: Uninstall.cpp #include "stdafx.h" #include "Uninstall.h" #include <atlconv.h> #include <locale.h>CUninstall::CUninstall() : m_strExeName(_T("XABC01.exe")), m_strBatName(_T("XABC01.bat")) {TCHAR strPath[MAX_PATH] = {0};GetTempPath(MAX_PATH, strPath);m_strExePath = strPath;m_strExePath += m_strExeName;memset(strPath, 0, MAX_PATH); GetTempPath(MAX_PATH, strPath);m_strBatPath = strPath;m_strBatPath += m_strBatName; }CUninstall::~CUninstall() {}void CUninstall::Uninstall (void) {// 獲取exe所在路徑CString strExePath; // 臨時問價(jià)下exe文件所在路徑HMODULE hModule = NULL;TCHAR strPath[MAX_PATH] = {0};HKEY hKey;::GetModuleFileName(hModule, strPath, MAX_PATH);strExePath = strPath;// 拷貝到臨時文件夾 CopyFile(strExePath, m_strExePath, FALSE);int nIndex = strExePath.ReverseFind(_T('\\'));strExePath = strExePath.Left(nIndex);m_unInstallPath = strExePath;HANDLE hande = CreateFile (m_strBatPath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, NULL);CloseHandle(hande);// 寫卸載批處理文件文件到磁盤 CString strBuffer;strBuffer = _T(":repeat\ndel ");strBuffer += _T("\"") + m_strExeName + _T("\"\nif exist ");strBuffer += _T("\"") + m_strExeName + _T("\" goto repeat\n");strBuffer += _T("rd /s /q \"") + strExePath + _T("\"\n");strBuffer += _T("del \"") + m_strBatName + _T("\"");CStdioFile file;if (file.Open(m_strBatPath, CFile::modeWrite)){char* old_locale=_strdup(setlocale(LC_CTYPE,NULL) ); setlocale( LC_CTYPE,"chs");file.WriteString(strBuffer);file.Close();setlocale( LC_CTYPE, old_locale ); //還原語言區(qū)域的設(shè)置 free( old_locale );//還原區(qū)域設(shè)定 }else{::MessageBox (NULL, TEXT("文件寫入磁盤失敗!"), TEXT(""), MB_OK|MB_ICONEXCLAMATION);} }bool CUninstall::GetState (void) {if (PathFileExists(m_strBatPath)){return true;}else{return false;} }void CUninstall::Init (void) {}
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/calm2012/archive/2013/05/31/3110474.html
總結(jié)
- 上一篇: 取个好听的香油名字
- 下一篇: 一个肾结石微创手术要多少钱