当前位置:  编程技术>c/c++/嵌入式

C++卸载程序功能示例

    来源: 互联网  发布时间:2014-10-22

    本文导语:  注:在程序退出的时候写上 自己的卸载代码。 代码如下:// FileName: Uninstall.h#pragma once class CUninstall{private:     // Exe文件名    CString m_strExeName;     // Bat文件名    CString m_strBatName; public:     // exe的路径    CString m_strExePat...

注:在程序退出的时候写上 自己的卸载代码。

代码如下:

// 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:

    // 是否已经复制到临时文件夹
    bool GetState (void);

    // 初始化
    void Init (void);

    // 卸载程序
    void Uninstall (void);
public:
    CUninstall();
    ~CUninstall();
};

代码如下:

// FileName: Uninstall.cpp

#include "stdafx.h"
#include "Uninstall.h"
#include
#include

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(":repeatndel ");
    strBuffer += _T(""") + m_strExeName + _T(""nif exist ");
    strBuffer += _T(""") + m_strExeName + _T("" goto repeatn");
    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 ); //还原语言区域的设置
        free( old_locale );//还原区域设定
    }
    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)
{

}


    
 
 

您可能感兴趣的文章:

  • android监听安装和卸载示例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • mount命令(linux操作系统)挂载卸载文件系统(cifs,光驱,nfs等)方法介绍
  • Redhat Linux8.0软件卸载问题(已安装,卸载时提示没安装)
  • ubuntu系统中软件安装、卸载以及查询是否已经安装某个软件包的方法
  • 高手指教——在没有卸载程序的情况下,如何卸载已安装的软件,象Windows那样?
  • 求助:我昨天安装了realplayer 9,结果装上了,但是当我用时,他总是说有另一个程序也在用,于是我想卸载,可是当我在命令行敲卸载命令后
  • 红帽子5.5,卸载软件一半被强制中断,现在卸载也不行,安装也不行。这个问题比较刁,具体内容已经写好了,希不惜赐教。
  • 完全卸载mysql(停止服务、卸载相关程序、删除注册表
  • 求教ubuntu系统卸载软件的问题
  • 光驱卸载问题
  • linux下怎么卸载realplayer??
  • 怎么卸载VMware Workstation
  • 如何干净卸载由多个rpm安装的包?
  • JDeveloper为什麽卸载不了?
  • 在Opensuse系统下怎么卸载软件?
  • 用程序卸载U盘
  • SOLARIS 下如何卸载ORACLE10G
  • 如何卸载vi vim
  • 怎么卸载Redhat9中的自带的GCC?
  • 关于LINUX内核模块的按需卸载及安装
  • 在linux下如何卸载软件
  • Kylix3卸载不完全造成的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3