C++卸載程序功能示例
注:在程序退出的時候寫上 自己的卸載代碼。
// FileName: Uninstall.h
#pragma once
class 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)復制到臨時文件夾
    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;        // 臨時問價下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ū)域的設置 
        free( old_locale );//還原區(qū)域設定
    }
    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)
{
}
欄 目:C語言
下一篇:c++ dynamic_cast與static_cast使用方法示例
本文標題:C++卸載程序功能示例
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/3908.html
您可能感興趣的文章


閱讀排行
本欄相關
- 04-02c語言函數(shù)調用后清空內存 c語言調用
 - 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
 - 04-02c語言的正則匹配函數(shù) c語言正則表達
 - 04-02c語言用函數(shù)寫分段 用c語言表示分段
 - 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
 - 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
 - 04-02c語言沒有round函數(shù) round c語言
 - 04-02c語言分段函數(shù)怎么求 用c語言求分段
 - 04-02C語言中怎么打出三角函數(shù) c語言中怎
 - 04-02c語言調用函數(shù)求fibo C語言調用函數(shù)求
 
隨機閱讀
- 08-05DEDE織夢data目錄下的sessions文件夾有什
 - 01-10使用C語言求解撲克牌的順子及n個骰子
 - 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
 - 08-05織夢dedecms什么時候用欄目交叉功能?
 - 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
 - 01-10delphi制作wav文件的方法
 - 01-10C#中split用法實例總結
 - 01-11ajax實現(xiàn)頁面的局部加載
 - 01-10SublimeText編譯C開發(fā)環(huán)境設置
 - 04-02jquery與jsp,用jquery
 


