Board logo

标题: 求教用dos如何得到一个软件的安装目录? [打印本页]

作者: feiying001     时间: 2007-2-13 14:44    标题: 求教用dos如何得到一个软件的安装目录?

比如我想先查看是否本机已经安装此软件,如果有,先得到些软件的目录地址然后进入相应的目录进行备份,我知道如果用默认的路径比较好判断,但有的可能在安装时改了默认的路径,这样就不好判断了,但我想应该在注册表中应该能找到相应目录,但不知怎么提取。
下面是我写的备份卡巴斯基病毒库的例子(个别代码):
if not exist "%ProgramFiles%\Kaspersky Lab\Kaspersky Internet Security 6.0" goto jinggao >nul 2>nul
goto do

:do
cd\
cd %ProgramFiles%\Kaspersky Lab\Kaspersky Internet Security 6.0
Xcopy "avpgui.ppl" "%TEMP%\Kaspersky\" /Y
Xcopy "baseinstaller.ppl" "%TEMP%\Kaspersky\" /Y
Xcopy "bl.ppl" "%TEMP%\Kaspersky\" /Y
Xcopy "execinstaller.ppl" "%TEMP%\Kaspersky\" /Y
Xcopy "imapprotocoller.ppl" "%TEMP%\Kaspersky\" /Y
Xcopy "updater2005.ppl" "%TEMP%\Kaspersky\" /Y
cd %Systemroot%\system32\drivers
Xcopy "klif.sys" "%TEMP%\Kaspersky\" /Y
cd\
cd %ALLUSERSPROFILE%\Application Data\Kaspersky Lab\AVP6
Xcopy "Data\*.*" "%TEMP%\Kaspersky\" /Y
Xcopy "Bases\*.*" "%TEMP%\Kaspersky\" /Y
Xcopy "Dskm\*.*" "%TEMP%\Kaspersky\" /Y
echo 备份文件已经成功拷贝!
echo.
echo 请稍等!正在生成升级包文件…………
cd /d "%TEMP%\"
Rar.exe a -df -m0 -k  -ep -t -agYYYYMMDDHHMMSS C:\KIS6.0.0.307_.ZIP %TEMP%\\Kaspersky\\
rd /S /Q %TEMP%\Kaspersky
goto ok

:jinggao
cls
color 0c
rd /S /Q %TEMP%\Kaspersky >nul 2>nul
echo ******************************************************************************
echo *                                                                            *
echo *      欢迎使用 *备份卡巴斯基(Kaspersky)病毒库并生成升级包* 工具              *
echo *                                                                            *
echo ******************************************************************************
echo.
echo.
echo        ★您的卡巴斯基(Kaspersky)版本不符!
echo.
echo        ★请下载安装卡巴斯基互联网安全套装KIS6.0.0.307标准版!
echo.
echo        ★请按任意键退出……
echo.
PAUSE>NUL
goto quit

这个方法对普通的安装应该正常,但对改了安装路径的就不好用了,能否提供一下思路?
作者: HUNRYBECKY     时间: 2007-2-13 21:38
因为我没有使用卡吧,所以具体不是很清楚,不过一般而言,你可以通过下列方式来实现.
一.你先使用注册表监视器软件如regsnap等在安装卡巴时监视软件安装时在注册表中写入了那些键,再根据这些键来获取是安装在哪个地方.
二.一般而言,软件安装后都会在注册表的下面地方写入:一是HKEY_CURRENT_USER\Software下面,如果有的话可以在这里提取需要的路径,如何提取请搜索以前的帖子,论坛里有很多.如果在HKCU下面没有找到,你可以直接到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths下面提取软件路径,这里基本上保存了所有软件通过开始菜单运行使用命令来执行的软件路径,可以直接提取,比较方便.如果你通过以上两中路径还是不能提取路径,那么你可以在注册表中搜索该软件的主程序如Kaspersky.exe(这里是假设为这个名字,换成对应的名称)来获取路径,因为杀毒软件都有服务,你可以在注册表中找服务的路径,应该也可以 .
三.另外还有一种方法,就是直接使用FOR语句在硬盘里找该程序.不过不一定很准确,比如你把安装前的软件名称和安装后的名称同名,则就可能判断失误,当然你还可以加如其他判断,如除了主程序名称外还有什么其他能区别的特征文件.
@echo off
FOR %%A IN (c d e f g h i j k l m n o p q r s t u v w x y z) DO (
   if EXIST %%A:\nul (
       FOR /F "DELIMS=" %%I IN ('DIR /B/S %%A:\MSACCESS.EXE') DO SET MYPATH=%%I & CLS
       )
)
CLS
ECHO %MYPATH%
pause
exit
[ Last edited by HUNRYBECKY on 2007-2-13 at 09:58 PM ]
作者: feiying001     时间: 2007-2-15 07:53
非常感谢您的回复!!!
用您提供的方法我测试成功!
其实我只想得到此目录然后取前面的部分:
就是比如得到的路径为c:\Program Files\Kaspersky Lab\Kaspersky Internet Security 6.0\avp.exe
我要的目录为c:\Program Files\Kaspersky Lab\Kaspersky Internet Security 6.0\
然后就可以备份此目录下的几个文件了。
参考了一些有关帖子,最后觉得还是用注册表提取更好些,比如:
for /f "tokens=2,*" %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\KasperskyLab\AVP6\environment" /v "ProductRoot"') do (
set Fav=%%j
)
echo 当前安装目录为 %Fav%
不知大家还有没有更好的办法,能否提出学习?