delphi中怎样检测是否安装了winrar 自己带个7-zip就可以,不用管人家装没装。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 从系统 Registry 里 看看 HKEY_CLASSES_ROOT\WinRAR 路径在不在?再读 HKEY_CLASSES_ROOT\WinRAR\shell\open\command 的值出来,它的值类似 "E:\Program Files\WinRar\WinRar.exe" "%1"设法取出第一段字符串,用它为值,判断硬盘里文件在不在,若在,那就是安装了。当然,这个值也是你要用来进行解压的必要参数。 不是有控件vclzip vclunzip吗 本来就不应该依赖用户的电脑是否装有rar,rar本来就是很小的东西,就像LS说的用vclzip或1楼说的带上7zip,使用命令行来调用7-zip来压缩和解压。 自己带rar的dll也可以,解压免费的 感谢各位的回答,只是我要解压的包是在linux下用tar命令生成的一个文件包比如123.tar.gz这个样的文件我试了一下用vclzip这个控件不能解压这种压缩包,只能用winrar这个软件解压,看来只能用读注册表的方式验证系统有没有安装winrar软件,但是没操作过注册表,试了一天都不行,感谢2楼给的思路。 或者用delphi的控件,或者带上winrar的rar.exe,unrar.exe,用命令行解决问题。 winara有绿色版不用安装也可使用。那你怎么检测? gz是gzip格式的压缩文件,baidu一下delphi解压gzip,或者你自己到zlib网站下载个dll,里面有现成的gzip导出函数。我这边有个c++的代码给你参考,delphi的话直接翻译一下:int gzcompress(const char *read_file,const char *write_file){ gzFile g = gzopen(write_file,"wb"); if (NULL == g) return gzip_error_file; AutoFuncClass auto1(AutoFunc(gzclose,g)); void *buf = NULL; DWORD buf_size = 0; if (!LoadFileToBuffer(string2wstring(read_file),&buf,buf_size)) return gzip_error_file; gzbuffer(g,8192); int ir = gzwrite(g,buf,buf_size); if (ir <= 0) return gzip_error_unknown; return gzip_error_success; } 建议你在程序中自带第三方解压工具,比如7za.exe,这个貌似是支持tar.gz的解压的因为现在压缩软件众多,winrar不像以前那么高的安装量吧如果非要检测,参考3楼的办法即可,读取注册表中的键值就行了 SENDMESSAGE 可以发送自定义数据类型吗 webbrowser模拟登录如何做 Delphi技术论坛QQ群组 为什么用DELPHI的ADO来查询SYBASE数据库的时候特别慢呀? 怎么把一个文字用别的字符表示出来! 如何取得硬盘分区的大小 如何将一张表的行列互换? 出售一款基于IE内核的浏览器的源代码,Delphi版的NetCaptor。 望高手赐教:如果用Richedit做编辑器,具体怎样用OLE来打开word文档?OLE怎么用啊? 恳请帮忙,本急着人要用 MouseMove 事件里如何得到鼠标移动到 DBGridEh 某行某列的值? fast report 条码问题
看看 HKEY_CLASSES_ROOT\WinRAR 路径在不在?
再读 HKEY_CLASSES_ROOT\WinRAR\shell\open\command 的值出来,
它的值类似 "E:\Program Files\WinRar\WinRar.exe" "%1"
设法取出第一段字符串,
用它为值,判断硬盘里文件在不在,
若在,那就是安装了。
当然,这个值也是你要用来进行解压的必要参数。
我试了一下用vclzip这个控件不能解压这种压缩包,只能用winrar这个软件解压,看来只能用读注册表的方式验证系统有没有安装winrar软件,但是没操作过注册表,试了一天都不行,感谢2楼给的思路。
int gzcompress(const char *read_file,const char *write_file)
{
gzFile g = gzopen(write_file,"wb");
if (NULL == g)
return gzip_error_file;
AutoFuncClass auto1(AutoFunc(gzclose,g));
void *buf = NULL;
DWORD buf_size = 0;
if (!LoadFileToBuffer(string2wstring(read_file),&buf,buf_size))
return gzip_error_file;
gzbuffer(g,8192);
int ir = gzwrite(g,buf,buf_size);
if (ir <= 0)
return gzip_error_unknown;
return gzip_error_success;
}
因为现在压缩软件众多,winrar不像以前那么高的安装量吧
如果非要检测,参考3楼的办法即可,读取注册表中的键值就行了