none
关于批处理takeown的问题 RRS feed

  • 问题

  • 因为在多个电脑上操作sql数据库,所以需要每次进行数据库的账户设置,很烦,写了一段代码进行自动处理:

    Try
                Dim p As New Process() '用Process就可以
                p.StartInfo.FileName = "cmd.exe"
                p.StartInfo.UseShellExecute = False
                p.StartInfo.RedirectStandardInput = True
                p.StartInfo.RedirectStandardOutput = True
                p.StartInfo.RedirectStandardError = True
                p.StartInfo.CreateNoWindow = True
                p.Start()
                Application.DoEvents()
                Dim data As String
                data = "takeown /F " & CurDir() & "\" & 数据库名称 & ".MDF"
                p.StandardInput.WriteLine(data) '这个Data就是cmd命令
                data = "icacls " & CurDir() & "\" & 数据库名称 & ".MDF" & " /grant " & My.User.Name.ToString & ":(DE,GR,GW,GA,GE)"
                p.StandardInput.WriteLine(data) '这个Data就是cmd命令
                data = "takeown /F " & CurDir() & "\" & 数据库名称 & "_log.LDF"
                p.StandardInput.WriteLine(data) '这个Data就是cmd命令
                data = "icacls " & CurDir() & "\" & 数据库名称 & "_log.LDF" & " /grant " & My.User.Name.ToString & ":(DE,GR,GW,GA,GE)"
                p.StandardInput.WriteLine(data) '这个Data就是cmd命令
                p.StandardInput.WriteLine("Exit") '这个是退出语句
                Dim strRst As String = p.StandardOutput.ReadToEnd() '执行完语句后取得显示内容.
                p.Close()
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try

    刚开始运行没有问题,但是后来发现不是每次都能成功,关键是一个文件的所有者问题。换了一个系统的话,即使使用了命令:

    takeown /F " & CurDir() & "\" & 数据库名称 & ".MDF"

    依然提示"错误:拒绝访问"。非常郁闷,不知道原因。但是在图形界面上,却又可以进行属性设置,手工添加:

    1、

    2、

    在手工更改所有者为当前系统账户之后,便可以顺利的运行了。

    疑惑就在于,换系统的刚开始,takeown命令为什么会被拒绝访问,以及解决的方法?

    2013年8月15日 15:09

答案

  • 你好!

    可以尝试一下添加/r /d y参数。即:

     

    data = "takeown /F " & CurDir() & "\" & 数据库名称 & ".MDF /R /D Y"

    既然在图形界面上可以对该文件进行设置,那么问题也可能是文件所在的文件夹的权限问题。


    Caillen
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2013年8月16日 7:18
    版主

全部回复

  • 你好!

    可以尝试一下添加/r /d y参数。即:

     

    data = "takeown /F " & CurDir() & "\" & 数据库名称 & ".MDF /R /D Y"

    既然在图形界面上可以对该文件进行设置,那么问题也可能是文件所在的文件夹的权限问题。


    Caillen
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2013年8月16日 7:18
    版主
  • 以管理员权限运行命令。
    2013年8月16日 7:26
  • 问题依然没有得到解决,使用管理员运行程序也是一样的。

    发现也许是电脑上的账户问题,系统重新更改过账户的名称,但是老的名称也还在一起,出现了新的账户名称形式(新账户名-老账户名)这样的表达方式,但是所有者还是老账户名称。在其他系统上测试,账户正常的情况下不会出现此类问题。

    2013年8月20日 15:20
  • 请问现在问题怎么样了?是否通过更改回你的账户名称解决了?

    Caillen
    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2013年8月27日 3:21
    版主
  • 等下次重装系统才知道,不过在其他电脑上没有出现此类问题。
    2013年9月3日 7:36