C# C命令行SetACL
我正在尝试修复文件夹所有者的问题。我正在使用SetACL。我可以使用cmd并使参数起作用,但当我尝试将其添加到程序中时……它不起作用。我已经设置了一个断点,以确保参数正确传递,并且它是正确的。欢迎任何帮助C# C命令行SetACL,c#,command-line,file-permissions,C#,Command Line,File Permissions,我正在尝试修复文件夹所有者的问题。我正在使用SetACL。我可以使用cmd并使参数起作用,但当我尝试将其添加到程序中时……它不起作用。我已经设置了一个断点,以确保参数正确传递,并且它是正确的。欢迎任何帮助 Process p = new Process(); if (Wow.Is64BitOperatingSystem == true) { p.StartInfo.FileName = "SetACLx64.exe";
Process p = new Process();
if (Wow.Is64BitOperatingSystem == true)
{
p.StartInfo.FileName = "SetACLx64.exe";
}
else
{
p.StartInfo.FileName = "SetACLx86.exe";
}
string command = @" -on """ + path +
@""" -ot file -actn setprot -op ""dacl:np;sacl:nc"" -actn setowner -ownr ""n:" + account + @";"" -rec cont_obj";
p.StartInfo.Arguments = command;
p.Start();
我已经得到了这个工作在同一个程序的注册表问题没有麻烦。只是无法让这个例子起作用。我试图设置的文件夹是%temp%文件夹。如果它像Sanjeevakumar当时询问的那样以管理员身份运行 尝试删除命令变量中的第一个空格。Arguments参数不要求为参数提供初始空间。这可能是导致问题的原因 在调用Start方法之前,还可以通过添加以下行来尝试访问进程的错误数据
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardError = true;
p.ErrorDataReceived += new DataReceivedEventHandler(ErrorDataHandler);
然后定义事件处理程序
private static void ErrorDataHandler(object sendingProcess, DataReceivedEventArgs e)
{
//using the DataReceivedEventArgs see if there is an error.
//If it comes there there is most likely an error.
}
所以当路径为%temp%时,代码不起作用?在这种情况下,解决方案很简单:变量扩展不是由SetACL完成的,而是在SetACL启动之前由命令shell完成的。如果直接启动SetACL而不调用cmd.exe,则永远不会发生变量扩展 您有两个选择: 使用展开C代码中的%temp%。 通过cmd调用SetACL,如下所示:cmd/c SetACL-on%temp%-ot文件。。。
您的进程与调试时的进程是否以管理员身份运行?是的。我可以用其他文件夹,但不是临时文件夹。如果语法正确,它应该可以工作。尝试通过批处理文件执行此操作。过程启动测试bat,%temp%;并使用%1接收bat文件中的第一个参数。与.bat文件一起使用。只是好奇为什么它在程序中不起作用?@John Andrews尝试将tqapping应用到输出流中,类似于我显示的点击错误流并查看是否有输出的方式。