要使用vb6使目录不可访问吗

要使用vb6使目录不可访问吗,vb6,permissions,share,directory,Vb6,Permissions,Share,Directory,我正在开发一个程序,如果硬盘快满了,它将禁用对文档服务器上共享文件夹的访问。目前,我只是将它们重命名为不同的名称,以防止应用程序服务器能够发送更多的文档。我想知道是否有办法以编程方式锁定文件夹,或者将其设置为只读,或者禁用其共享状态。据我所见,直接在windows中将文件夹更改为只读并不能阻止新文件被复制到其中。有人知道怎么做吗?我当前的代码如下所示: Private Function MoveShares(ByVal strOldLocation As String, ByVal strNew

我正在开发一个程序,如果硬盘快满了,它将禁用对文档服务器上共享文件夹的访问。目前,我只是将它们重命名为不同的名称,以防止应用程序服务器能够发送更多的文档。我想知道是否有办法以编程方式锁定文件夹,或者将其设置为只读,或者禁用其共享状态。据我所见,直接在windows中将文件夹更改为只读并不能阻止新文件被复制到其中。有人知道怎么做吗?我当前的代码如下所示:

Private Function MoveShares(ByVal strOldLocation As String, ByVal strNewLocation As String) As Boolean

    Dim objFSO As New FileSystemObject
    If objFSO.FolderExists(strOldLocation) Then
        LogAction "Moving " & strOldLocation & " to " & strNewLocation
        objFSO.MoveFolder strOldLocation, strNewLocation
    End If
    Set objFSO = Nothing

End Function

非常基本,但我希望我能以一种更微妙的方式做到这一点。

谷歌搜索了这一点,在Daniweb上发现了类似的东西,这不是我的代码,所以没有保修。我把代码贴在下面。假设这样做有效,请尝试修改权限以拒绝应用程序使用的帐户。拒绝权限将覆盖允许的权限。您可以查看源代码

Dim strHome文件夹、strHome、strUser
Dim intRunError、objShell、objFSO
strHomeFolder=“C:\Test”
strUser=“srikanth”
设置objShell=CreateObject(“Wscript.Shell”)
设置objFSO=CreateObject(“Scripting.FileSystemObject”)
如果存在objFSO.folder(strHomeFolder),则
intRunError=objShell.Run(“%COMSPEC%/c Echo Y | cacls”&strHomeFolder&“/t/c/g everyone:F”,2,True)
wscript.echo“文件”&strHomeFolder&“。权限已更改为每个文件。”
如果intRunError为0,则
Echo“为用户分配权限时出错”&strUser&“到主文件夹”&strHomeFolder
如果结束
如果结束

对于共享文件夹,我最终编辑了注册表以“重命名”共享本身,而不是文件夹。我通过读取注册表条目数据、删除条目并将数据写入新条目来实现这一点。我还必须重新启动计算机浏览器和服务器服务,以便服务器获得新的共享名。这会阻止应用服务器发送文档,因为它找不到具有旧名称的共享。在将安全条目值写入新条目之前,我还必须将其从十进制转换回十六进制,并在停止和重新启动服务之间等待,以确保它们已完成,然后再转到下一个服务

Private Function RenameShare(ByVal strOldName As String, ByVal strNewName As String) As Boolean

Dim objRegAccess As Object
Dim varValues() As Variant
Dim varItem As Variant
Dim strSharePath As String
Dim strSecurityPath As String
Dim strValues As String
Dim strCmd As String

Set objRegAccess = CreateObject("Wscript.Shell")
strSharePath = "HKLM\SYSTEM\CurrentControlSet\services\LanmanServer\Shares\"
strSecurityPath = strSharePath & "Security\"
strValues = ""
varValues = objRegAccess.RegRead(strSharePath & strOldName)
strValues = ""
For Each varItem In varValues
    strValues = strValues & varItem & "~"
Next
RunCommand "REG ADD " & strSharePath & " /v " & strNewName & " /t REG_MULTI_SZ /s ~ /d " & strValues & " /f", False
RunCommand "REG DELETE " & strSharePath & " /v " & strOldName & " /f", False
strValues = ""
varValues = objRegAccess.RegRead(strSecurityPath & strOldName)
For Each varItem In varValues
    strValues = strValues & varItem & "~"
Next
strValues = ConvertDecToHex(strValues)
RunCommand "REG ADD " & strSecurityPath & " /v " & strNewName & " /t REG_BINARY /d " & strValues & " /f", False
RunCommand "REG DELETE " & strSecurityPath & " /v " & strOldName & " /f", False
RunCommand "NET STOP ""Computer Browser"" ", True
RunCommand "NET STOP ""Server"" ", True
RunCommand "NET START ""Server"" ", True
RunCommand "NET START ""Computer Browser"" ", False

End Function

应用服务器如何访问文件夹?最好的qay是查看配额,这将给源一个严重的错误。否则,将更改权限。我对这种方法有问题。我假设您使用的是某些版本的Windows,因为您希望使用VB来实现这一点。如果只监视几个共享文件夹,则可能无法停止可能正在填充磁盘的其他内容。如果您使用的是带有性能监视器的windows版本,则应尝试使用该版本。将其配置为向能够评估和处理服务器磁盘的人员发出警报。关于performance monitor的更多信息可以在这里找到:实际上,对于我要禁用的两个文件夹中的每一个,都有两种不同的情况。应用服务器通过ftp将文档发送到一个文件夹,上面的代码处理该文件夹,因为重命名会导致应用服务器上的ftp失败。这是期望的结果。还有一个应用程序使用共享访问将文档发送到第二个文件夹。重命名该文件夹实际上会破坏共享链接。我们已经有了一套流程来监控所有这些内容,但这只用于禁用特定文档存储驱动器上的文件夹,而不是系统C:驱动器。我还找到了Wscript.Network对象,但它似乎只能添加和删除共享,而不能重命名共享。实际上,我们试图避免更改权限,因为我们不确定是否每个服务器都设置了相同的用户访问此共享。他们应该这样做,但不能保证。我正在寻找一种方法来重命名共享本身,而不是文件夹。到目前为止,我发现最好的方法是从wscript shell对象运行“netshare”,但它仍然不太正确。我可以创建新共享并设置其属性,删除现有共享,但据我所知,我不能直接重命名共享。我还认为我可能能够编辑共享的注册表值。
Private Function RenameShare(ByVal strOldName As String, ByVal strNewName As String) As Boolean

Dim objRegAccess As Object
Dim varValues() As Variant
Dim varItem As Variant
Dim strSharePath As String
Dim strSecurityPath As String
Dim strValues As String
Dim strCmd As String

Set objRegAccess = CreateObject("Wscript.Shell")
strSharePath = "HKLM\SYSTEM\CurrentControlSet\services\LanmanServer\Shares\"
strSecurityPath = strSharePath & "Security\"
strValues = ""
varValues = objRegAccess.RegRead(strSharePath & strOldName)
strValues = ""
For Each varItem In varValues
    strValues = strValues & varItem & "~"
Next
RunCommand "REG ADD " & strSharePath & " /v " & strNewName & " /t REG_MULTI_SZ /s ~ /d " & strValues & " /f", False
RunCommand "REG DELETE " & strSharePath & " /v " & strOldName & " /f", False
strValues = ""
varValues = objRegAccess.RegRead(strSecurityPath & strOldName)
For Each varItem In varValues
    strValues = strValues & varItem & "~"
Next
strValues = ConvertDecToHex(strValues)
RunCommand "REG ADD " & strSecurityPath & " /v " & strNewName & " /t REG_BINARY /d " & strValues & " /f", False
RunCommand "REG DELETE " & strSecurityPath & " /v " & strOldName & " /f", False
RunCommand "NET STOP ""Computer Browser"" ", True
RunCommand "NET STOP ""Server"" ", True
RunCommand "NET START ""Server"" ", True
RunCommand "NET START ""Computer Browser"" ", False

End Function