CSDN中有几篇文章解决了在WIN2000下设置文件夹共享的方法,但文中虽然有关于共享权限的常量声明,但使用根本无效,就是说无论如何设置,最终结果还是设置了完全共享。  我非常急迫的需要一个设置“只读”共享的方案。如果VB无法解决,用VC的DLL或其它免费控件也可以。  请看清问题:不考虑属性中的NTFS权限,只要运行代码后在“共享”对话框的“权限”栏中体现出“只读”就可以。  拜托各位专家了!

解决方案 »

  1.   

    可以用SetAttr将文件夹设为只读
      

  2.   

    完全共享就不用代码了
    直接用命令即可shell "net.exe share sdf$=d:\temp /users:3",0
      

  3.   

    我是问题者:
    用SetAttr将文件夹设为只读是无法限制登录用户删改内容的!
    用net share可以设置完全共享但不能设置只读共享。补充说明:win2000无论是NTFS还是FAT32都能用代码设置文件夹“只读”共享(用户Everyone即可),如果能用类似net这样的命令行或第三方DLL或控件解决也可以。
      

  4.   

    向文件夹的属性窗口发送键盘指令,控制好各指令的延时时间,是能实现的,虽然要显示出一个属性窗口,可必竞可以实现,因为这么久的帖子,又搜便CSDN也没有相关的成功解答,我也只好用这样的方法了。请求版主帮忙解除帖子,因为同一问题发帖时页面出错没有显示结果发重了,问题没能解决也要损失200分。
      

  5.   

    别忙着走。给你一个实际可行的办法:
    在注册表中HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan主键下添加一个文件夹,以你的共享名命名,在其下添加下列键值:Flags     0x00000191(这里是关键,表示只读)DWORD
    Parm1enc  0000(长度为 0 的二进制值)
    Parm1enc  0000(长度为 0 的二进制值)
    Parth     "C:\yourpath"
    Re    ""
    Type      0x00000000用完删除即可。
    最简单的方式是写两段 VBS 代码。或是嵌入 VB 中,或是用 Shell 函数调用。
      

  6.   

    感谢of123!
    这段代码我明白,只能实现在98中的共享设置,2000注册表的位置不是这个,有关的注册表无法解密含义,尤其是那个二进制表项,再有用修改注册表的方法必须重新启动计算机才能生效。我对你说的用VBS代码很感兴趣,如果能实现在2000下设置只读共享且不用重启就生效,能否反代码帖上,再次感谢!
      

  7.   

    Dim WSHShell
    Set WSHShell = WScript.CreateObject("WScript.Shell")WSHShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\myDir", "myShare"
    WSHShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\myDir\Flags", 0x00000191, "REG_DWORD"
    WSHShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\myDir\Parm1enc", 0, "REG_BINARY"
    WSHShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\myDir\Parm2enc", 0, "REG_BINARY"
    WSHShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\myDir\Re", ""
    WSHShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\myDir\Type", 0, "REG_DWORD"----------------------------------------------------------------------------------------
    Dim WSHShell
    Set WSHShell = WScript.CreateObject("WScript.Shell")WSHShell.RegDelete "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\myDir"
      

  8.   

    共享应该是立即生效的。重来在机器上手工设置共享并不需要重新启动机器。至于在 Win2k 上相应的键值是什么,你创建一个只读共享,然后到注册表中去看看就知道了。另外,你的程序必须有读写注册表的权限。
      

  9.   

    修改注册表后不重新启动是不能生效的,这我试过,上述VBS代码我没试过,我只是用VB的API通过修改注册表完成过共享设置,在98下三种权限、用户数量都可方便设置,只是必须重新启动才行。
    在2000下这种方法实现不了,因为共享有关的表项和权限(尤其是NTFS分区)是相联系的,注册表中虽然只有几条但因为是二进制的,不好操作,我试过,把不同机器上设置好的表项导出再到其它计算机上导入也无法实现,看来在2000下的表植是与很多软件硬件及其它设置相关的不能简单修改生效。
    尽管如此我还是感谢你的参与,再等一等我会给你高手的。谢谢
      

  10.   

    我目前使用的是模拟键盘指令操作来设置WIN2000下的权限,虽然能完成任务但总感觉不满意,所以想继续听听高手的方法。
      

  11.   

    Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\Shares]
    "test"=hex(7):43,00,53,00,43,00,46,00,6c,00,61,00,67,00,73,00,3d,00,30,00,00,\
      00,4d,00,61,00,78,00,55,00,73,00,65,00,73,00,3d,00,34,00,32,00,39,00,34,00,\
      39,00,36,00,37,00,32,00,39,00,35,00,00,00,50,00,61,00,74,00,68,00,3d,00,45,\
      00,3a,00,5c,00,74,00,65,00,73,00,74,00,00,00,50,00,65,00,72,00,6d,00,69,00,\
      73,00,73,00,69,00,6f,00,6e,00,73,00,3d,00,30,00,00,00,52,00,65,00,6d,00,61,\
      00,72,00,6b,00,3d,00,00,00,54,00,79,00,70,00,65,00,3d,00,30,00,00,00,00,00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\Shares\Security]
    "test"=hex:01,00,04,80,30,00,00,00,4c,00,00,00,00,00,00,00,14,00,00,00,02,00,\
      1c,00,01,00,00,00,00,00,14,00,bf,01,13,00,01,01,00,00,00,00,00,01,00,00,00,\
      00,01,05,00,00,00,00,00,05,15,00,00,00,83,3d,2b,46,c6,bb,50,7a,82,8b,a6,28,\
      f4,01,00,00,01,05,00,00,00,00,00,05,15,00,00,00,83,3d,2b,46,c6,bb,50,7a,82,\
      8b,a6,28,01,02,00,00"test"=REG_MULTI_SZ:CSCFlags=0
    MaxUses=4294967295
    Path=E:\test
    Permissions=0
    Re=
    Type=0
      

  12.   

    yanexp(啊福) 的这种修改注册表的方法是不保证的,98/2000下相关注册表项不同,而且不同计算机、操作系统安装在不同分区、NTFS与FAT32、磁盘配额使用与否都直接影响到其中的二进制表项值,除非真的找到了这二进 制表项值是如何生成的,否则这种方法不可取,还何况不重新启动计算机是不会生效的。把yanexp(啊福) 的这些内容直接导入到另外计算机上试试就知道不成功了。
      

  13.   

    在Microsoft 里找到的也是完整共享,权限方面看还有没有得改Const FILE_SHARE = 0
    Const MAXIMUM_CONNECTIONS = 25
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set objNewShare = objWMIService.Get("Win32_Share")
    errReturn = objNewShare.Create _
        ("e:\Tools", "FinanceShare", FILE_SHARE, _
            MAXIMUM_CONNECTIONS, "Public share for the Finance group.")
    Wscript.Echo errReturn
      

  14.   

    系统里有个cacls设置权限的东东,不过我试了,它好像只能设置安全里的权限,不是共享里的共享,真是郁闷小心使用,不然文件夹不能用了