我制作了一个安装包,想问下如何让用户点安装包安装完后,然后自动删除掉安装包呢???

解决方案 »

  1.   

    批处理你可以动态生成啊,路径直接就写在批处理里面了,不用搜索啊。一般安装程序都支持获取当前安装程序路径的脚本接口啊,如果没有那也应该支持插件,或者直接支持dll。你用windows API 去获取当前路径。
      

  2.   

    // DeleteSelf01.cpp : Defines the entry point for the application.
    ////用到strsafe.h,VC6不能用
    //写批处理文件,利用dos命令删除,循环直到删除为止。
    #include "stdafx.h"
    #include <strsafe.h>BOOL   DeleteSelf();   int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
      // TODO: Place code here.
    if   (!DeleteSelf())   
    {   
    MessageBox(NULL,   "failed!",   "error",   0);   
    }    //Sleep(1000);
    return 0;
    }BOOL   DeleteSelf()   
    {   
    TCHAR   szTempPath[MAX_PATH]   =   {0};   
    DWORD   dwTempPathLength   =   GetTempPath(sizeof(szTempPath)   /   sizeof(szTempPath[0]),   szTempPath);   

    if   (dwTempPathLength   >   MAX_PATH)   
    {   
    return   FALSE;   
    } char str[] = "c:\\";
    strcpy(szTempPath,str);

    TCHAR   szBatName[MAX_PATH]   =   {0};   
    StringCchPrintf(szBatName,   sizeof(szBatName)   /   sizeof(szBatName[0]), 
    "%s%s",   szTempPath,   "DeleteSelf.bat");   

    //取本模块名   
    TCHAR   szModuleFileName[MAX_PATH]   =   {0};   
    GetModuleFileName(NULL,   szModuleFileName,   sizeof(szModuleFileName)   /   sizeof(szModuleFileName[0]));   

    //创建批处理文件   
    HANDLE   hFile   =   CreateFile(szBatName,   GENERIC_WRITE,   FILE_SHARE_READ,   NULL,   CREATE_ALWAYS,
    0,   NULL);   

    if   (hFile   ==   INVALID_HANDLE_VALUE)   
    {   
    return   FALSE;   
    }   

    TCHAR   szShellCmd[MAX_PATH]   =   {0};   

    //删除本模块和批处理文件的DOS命令   
    StringCchPrintf(szShellCmd,   sizeof(szShellCmd)   /   sizeof(szShellCmd[0]),   ":repeat\r\n");   
    StringCchPrintf(szShellCmd,   sizeof(szShellCmd)   /   sizeof(szShellCmd[0]),   "%sdel   %s\r\n", 
    szShellCmd,   szModuleFileName);   
    StringCchPrintf(szShellCmd,   sizeof(szShellCmd)   /   sizeof(szShellCmd[0]), 
    "%sif   exist   %s   goto   repeat\r\n",   szShellCmd,   szModuleFileName);   
    StringCchPrintf(szShellCmd,   sizeof(szShellCmd)   /   sizeof(szShellCmd[0]),  
    "%sdel   %s\r\n",   szShellCmd,   szBatName);  
    //StringCchPrintf(szShellCmd,   sizeof(szShellCmd)   /   sizeof(szShellCmd[0]),  
    // "%s pause   %s\r\n",   szShellCmd,   NULL);   

    DWORD   dwNumWriten   =   0;   

    //将命令写入批处理文件   
    WriteFile(hFile,   szShellCmd,   sizeof(szShellCmd),   &dwNumWriten,   NULL);   

    CloseHandle(hFile);   

    //执行命令   
    //注意呀,dos可是不支持长文件夹和长文件名
    ShellExecute(NULL,   "open",   szBatName,   NULL,   szTempPath,   SW_HIDE);   
    //ShellExecute(NULL,   "open",   szBatName,   NULL,   szTempPath,   SW_SHOW);   

    return   TRUE;   
    }