标题: 怎样判断机器里是否已经安装了某个软件?
[打印本页]
作者: numen
时间: 2006-7-18 15:13
标题: 怎样判断机器里是否已经安装了某个软件?
大家好:
(在实践中学习真是一种乐趣. 感言)
个人做了一个小程序A,但需要另一个软件B的配合才行. 程序A和B都放在u盘里.
所谓的配合就是指B程序只需在一台机器上安装一次即可,下次启用A程序时就不再需再安装B了.(机器环境为win..系统.)
现在的想法就是:一个批处理首先先判断一下机器中B软件安装了没有,安装了则调用程序A,若没有则安装B,然后再调用A.(一般情况下第一次使用大多都是要安装B的)
曾经想过在u盘中作个文件,其实就是起标识符的作用:安装了B后就创建一个文件.然后每次启动批处理,就以这个文件存不存在作为判断的依据.但是在换了一台机器使用的情况下,就会出现误判断.
谢谢大家.!
请多指教.
作者: namejm
时间: 2006-7-18 18:17
请问B程序是强制安装在固定位置吗?如果是这样的话,那就好办得多;如果是可以指定任意位置,则会耗费大量的搜索时间。
假设是在固定位置:
@echo off
if exist "位置\程序B" "位置\程序A" else "位置\程序B的安装程序.exe" && goto continue
exit
:continue
echo 如果程序B已经安装完毕,请按任意键调用程序A
pause
"位置\程序A"
假设程序B安装在可选位置:
@echo off
:: 此代码会耗费大量时间,请耐心等待
setlocal enabledelayedexpansion
set exclude=
set /p exclude=请输入U盘所在位置的盘符字母:
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 (
if "%%a"=="!exclude!" "位置\程序B的安装程序.exe" && goto continue
for /f "delims=" %%A in ('dir /a /s /b %%a:\ 程序B') do if exist "位置\程序B" "位置\程序A" else "位置\程序B的安装程序.exe" && goto continue
)
)
exit
:continue
echo 如果程序B已经安装完毕,请按任意键调用程序A
pause
"位置\程序A"
[
Last edited by namejm on 2006-7-19 at 13:25 ]
作者: numen
时间: 2006-7-19 09:21
我的神啊~~真牛
苦学中...谢谢
作者: numen
时间: 2006-7-19 09:41
还好是固定位置...:lol:
作者: namejm
时间: 2006-7-19 13:24
今天发现2楼的第二个代码有一处错误,将导致代码出错,具体是set enabledelayedexpansion这一句中,误把setlocal写成了set了,现已经更正,请重新测试。
作者: willsort
时间: 2006-7-19 13:45
Re namejm:
其实标记不一定要在安装文件夹下的,可以在注册表的固定键值下,也可以在应用软件的共享目录下(比如CommonProgramFiles),这样判定起来会简单的多。如果想增加这种方法的安全性,可以将标记设定为一个指出程序安装路径和安装文件的数据或程序文件,以方便进行本地化的存在性判定。
作者: namejm
时间: 2006-7-19 14:59
Re willsort:
好久不见老大现身了:)
是不是所有安装好的程序都会出现在注册表的固定位置或者是应用软件的共享目录下?对注册表和应用程序的共享目录不是很熟悉,请老大详细说明一下。
作者: fastslz
时间: 2006-7-19 16:30
利用注册表判断是否安装谷歌工具条2例
@echo off
reg query "HKLM\SOFTWARE\google">nul
if not errorlevel 1 echo 你的电脑上已经安装谷歌工具条!
if errorlevel 1 echo 你的电脑上没有安装谷歌工具条?
PAUSE >NUL
或者:
@echo off
reg query "HKLM\SOFTWARE"|find /i "google"
if not errorlevel 1 echo 你的电脑上已经安装谷歌工具条!
if errorlevel 1 echo 你的电脑上没有安装谷歌工具条?
PAUSE >NUL