文件无法拷贝到Windows 7,Windows Server 2008 系统虚拟目录的问题

最近需要实现将文件拷贝到操作系统的虚拟目录下,因为记得创建网站的时候,IS2010有看过一个<IISROOTFolder>变量,心想既然IS提供了这个变量,我只要把文件的目标位置设置成这个变量就可以了吧。

结果XP,server 2003系统都可以拷贝成功,但由于Windows 7 ,Windows Server 2008 操作系统的虚拟目录是默认设置成%SystemDrive%\inetpub\wwwroot,而IS提供的<IISROOTFolder>变量却无法自动将%SystemDriver%解析成系统盘符,所以拷贝过程会报错。

 

经过摸索,可以用以下方式解决:

1. 思路:通过获取虚拟目录的路径在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp 的PathWWWRoot键值中的位置,如果该键值中存在%SystemDriver%的字符串,就通过脚本解析成系统盘符,然后将文件拷贝到最后解析后的虚拟目录中。

 

2.工程类型:IS 2010 ,installscript

 

3.定义的变量 :

STRING  szKey, szDefaultPath, szFindMe,svValue,svReturnString,svResult,svSubStr;
NUMBER i,AllReturn,PartlReturn;


4.具体脚本:

//获取虚拟目录在注册表中的位置

if (RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE) = 0) then
  nvType=REGDB_STRING_EXPAND;
   nvSize=-1;
   szKey="SOFTWARE\\Microsoft\\InetStp";
   RegDBGetKeyValueEx (szKey, "PathWWWRoot", nvType, ReturnName, nvSize );
endif; 


 

//查找返回的注册表值中是否含有"SystemDrive",

szFindMe = "SystemDrive";

i = StrFind (ReturnName, szFindMe); 


if (i>0) then   //大于0表示找到
      GetEnvVar ( "SystemDrive", svValue );  //转化成实际的系统盘符


     AllReturn = StrLength(ReturnName);   //获取整个注册表值的总长度

   PartlReturn = StrLength("SystemDriver");    //获取SystemDriver的长度


   StrSub(svSubStr, ReturnName,PartlReturn+1,AllReturn );   //返回从SystemDriver+1位到总长度中间的所有字符串,即”\inetpub\wwwroot”


   ReturnName=svValue+svSubStr;  //得到解析的虚拟目录的路径
 

//将文件拷贝到解析后的路径下

   XCopyFile(SUPPORTDIR^"crossdomain.xml",ReturnName,LAAW_OPTION_WAIT|LAAW_OPTION_HIDDEN|COMP_UPDATE_DATE|COMP_UPDATE_VERSION);

else

 

//i小于等于0,表示得到的注册表的键值不包含“SystemDrive”,直接将文件拷贝到得到的路径中
     XCopyFile(SUPPORTDIR^"crossdomain.xml",ReturnName,LAAW_OPTION_WAIT|LAAW_OPTION_HIDDEN|COMP_UPDATE_DATE|COMP_UPDATE_VERSION);
endif;

 

 

版权声明:转载请以链接形式注明原始出处。    

posted on 2011-05-12 14:32  奕婷  阅读(992)  评论(0编辑  收藏  举报