hur.cn - 华软网

 热门搜索

自动删除安装源

  作者:未知    来源:网络    更新时间:2011/8/4
我制作了一个安装包,想问下如何让用户点安装包安装完后,然后自动删除掉安装包呢???
---华软 网友回答---
在安装包里打包一个批处理文件,安装完成后运行该删除安装包的批处理
---华软网友回复---
释放一个小程序,或者批处理,在你安装程序结束的时候启动,新启动的程序一直尝试删除安装包,直到删除为止。
---华软网友回复---
安装完成的最后一步后,删除对应的安装包就可以了.
---华软网友回复---
自动安装完后删除掉对应的安装包,但是具体的怎么获得该安装包的路径并删除掉呢?

批处理怎么写??我现在写了一个批处理是搜索所有盘符中的同名的安装包然后删除掉。。

但是我希望的是获得该安装包的路径,只删除该安装包。
---华软网友回复---
顶,没人回答吗?
---华软网友回复---
这个要看你使用的打包工具是否支持脚本或提供了宏定义变量了
---华软网友回复---
批处理你可以动态生成啊,路径直接就写在批处理里面了,不用搜索啊。

一般安装程序都支持获取当前安装程序路径的脚本接口啊,如果没有那也应该支持插件,或者直接支持dll。你用windows API 去获取当前路径。
---华软网友回复---
// 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;   
}         
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。