感觉JavaScript只要客户端许可真的可以说无所不能,自己写的一个小程序,验证客户端机器上是否装了某个文件,安装了的话运行,没安装的话转到下载页。
<!
DOCTYPE html PUBLIC
"
-//W3C//DTD XHTML 1.0 Transitional//EN
"
"
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
"
>
<
html xmlns
=
"
http://www.w3.org/1999/xhtml
"
>
<
head
>
<
title
>
Untitled Page
</
title
>
<
script language
=
"
javascript
"
type
=
"
text/javascript
"
>
function
FileTest()

...
{
//var myfolderspec="c:/";
//ShowFolderFileList(myfolderspec);
// ShowDriveList();
var myfilename="";
GetAllDisksOfMachine();
}
//
在客户端各个盘中寻找xxjd.ini,找到后读取其中的内容
function
IsThisDiskHasTheIni(folderspec,drivename)

...
{
var fso, f, fc, s,HasIni=false;
fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.GetFolder(folderspec);
fc = new Enumerator(f.files);
s = "";
for (;!fc.atEnd();fc.moveNext())

...{
s = fc.item();
if(s==(drivename+":/WINDOWS/xxjd.ini"))

...{
HasIni=true;//有xxjd.ini,则检索其中指定路径是否存在xxjd.exe
s=drivename+":/"+"/"+"WINDOWS"+"/"+"/"+"xxjd.ini";//xxjd.ini存放的完整路径
var PathOfXxjdSystem=ReadALineFromIni(s);//从xxjd.ini中读出XXJD.exe存在的完整路径
IsThisFolderHasXXJDexe(PathOfXxjdSystem);
}
}
if(HasIni==false)//如果没有xxjd.ini则肯定没装形象进度系统,转入下载页面

...{
location.href="http://www.baidu.com";
}
}
//
判断xxjd.ini中指定的xxjd.exe的路径包含的文件夹是否都存在,并判断是否存在xxjd.exe文件
function
IsThisFolderHasXXJDexe(folderspec)

...
{
var arrFolders=new Array();//保存folderspec路径的各文件夹名称,先判定它们中是否都存在,若不存在,也转入下载页面
arrFolders=folderspec.split("/");
var MotherPath="",FolderName="";
for(var i=0;i<arrFolders.length-1;i++)

...{
MotherPath+=arrFolders[i]+"//";
FolderName=arrFolders[i+1];
if(FolderName.length<1)//文件夹名为空,则跳出循环

...{
break;
}
if(IsMotherPathHasFolder(MotherPath,FolderName)==false)//如果xxjd.exe的路径中有一个文件夹不存在,则下载

...{
location.href="http://www.baidu.com";
return;
}
}
var fso, f, fc, s,HasExe=false;
fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.GetFolder(folderspec);
fc = new Enumerator(f.files);
s = "";
for (;!fc.atEnd();fc.moveNext())

...{
s = fc.item();
if(s==folderspec+"XXJD.exe")

...{
HasExe=true;
exec(s);
}
}
if(HasExe==false)
location.href="http://www.baidu.com";
}

//
获取客户端电脑的各磁盘分区名加WINDOWS文件夹名,防止用户将系统装入除C盘外其它盘的情况
function
GetAllDisksOfMachine()

...
{
var DiskName="";//磁盘分区名
var SigleDisk;
var fso=new ActiveXObject("Scripting.FileSystemObject");
var e=new Enumerator(fso.Drives);//创建包含客户机上所有硬盘分区的计数器
var arrAllDisks=new Array();//保存所有磁盘分区字符串的数组
var i=0;
for (;!e.atEnd();e.moveNext())

...{
SigleDisk=e.item();
if(SigleDisk.DriveType==4)//如果是光盘则不要搜索
continue;
DiskName= SigleDisk.DriveLetter+":/"+"/"+"WINDOWS"+"/"+"/";//建立磁盘分区搜索字符串,如"C:/WINDOWS/"
arrAllDisks[i]=DiskName;
IsThisDiskHasTheIni(arrAllDisks[i],SigleDisk.DriveLetter);
i++;
}
}

//
从inifilepath路径指定的xxjd.ini文件中读取xxjd.exe的路径
function
ReadALineFromIni(inifilepath)

...
{
var fso,otf,s="",ForReading=1,result="";
fso = new ActiveXObject("Scripting.FileSystemObject");
otf = fso.OpenTextFile(inifilepath, ForReading);
s=otf.ReadLine();//读取第1行
s=otf.ReadLine();//读取第2行
otf.Close();
var fstr=s.replace(///g,"//");//把单""转成"/"
var arr1=new Array();
arr1=fstr.split("=");//将第2行用“=”拆分,等号后的放入arr1[1]得到路径
var arr2=new Array();
arr2=arr1[1].split("//");//将arr1[1]用/拆分,放入arr2
var result=arr2[0]+"/";
for(var i=1;i<arr2.length;i++)

...{
if(arr2[i].length<1)

...{
continue;
}
if(i==arr2.length-1)
break;
else
result+=(arr2[i]+"/");
}
return (result);//返回获取的XXJD.exe的路径
}



function
IsMotherPathHasFolder(motherpath,foldername)

...
{
var fso, f, fc, s,HasExe=false;
fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.GetFolder(motherpath);
fc = new Enumerator(f.SubFolders);
s = "";
var arr=new Array();
var path="";
arr=motherpath.split("//");
for(var i=0;i<arr.length;i++)

...{
if(arr[i].length>0)
path+=(arr[i]+"/");
}
for (;!fc.atEnd();fc.moveNext())

...{
s = fc.item();
if(s==path+foldername)//路径motherpath下有名为foldername的文件夹

...{
return true;
}
}
return false;
}

//
运行由pathofexe指定的完整路径名
function
exec (pathofexe)

...
{
var wsh = new ActiveXObject('WScript.Shell');
if(wsh)

...{
wsh.Run(pathofexe);
}
}

function
ShowDriveList()
...
{
var fso, s, n, e, x; // 声明变量。
fso = new ActiveXObject("Scripting.FileSystemObject");
e = new Enumerator(fso.Drives); // 在驱动器上创建 Enumerator。
s = "";
for (;!e.atEnd();e.moveNext()) // 枚举驱动器集合。

...{
x = e.item();
s = s + x.DriveLetter;
alert(x.VolumeName);
s += " - ";
if (x.DriveType == 3) // 查看是否网络驱动。
n = x.ShareName; // 获取共享名。
else if (x.IsReady) // 查看驱动器是否已就绪。
n = x.VolumeName; // 获取卷名。
else
n = "[驱动器未就绪]";
s += n + "<br>";
}
document.write(s);
return(s); // 返回活动驱动器列表。
}
</
script
>
</
head
>
<
body
>
<
form runat
=
"
server
"
id
=
"
form1
"
>
<
input id
=
"
btntest
"
type
=
"
button
"
value
=
"
button
"
onclick
=
"
FileTest();
"
/>
</
form
>
</
body
>
</
html
>