• 文件无法拷贝到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;

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

  • 相关阅读:
    拓扑排序笔记
    Codeforces Round #683 (Div. 2, by Meet IT)(A->C)(构造,思维,贪心)
    Acwing 846. 树的重心(DFS枚举删除每一个点)
    Acwing 125. 耍杂技的牛(贪心)(从局部到全局)
    Acwing 802. 区间和(下标离散化+vector+二分)
    Acwing 799. 最长连续不重复子序列(双指针)
    Acwing 139. 回文子串的最大长度(前缀+后缀处理+哈希+二分)
    Linux shell 变量$#,$@,$0....的含义
    一双不锈钢筷子 的测试用例?
    OSI模型 TCP/IP模型 再整理
  • 原文地址:https://www.cnblogs.com/sabrinahuang/p/2044347.html
Copyright © 2020-2023  润新知