我正在尝试修复文件夹上所有者的问题。我正在使用SetACL。我可以使用cmd并使参数有效,但是当我尝试将它添加到程序中时...它不起作用。我设置了一个断点,以确保参数传递正确而且确实如此。欢迎任何帮助。
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%
文件夹。
答案 0 :(得分:0)
如果按照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.
}
答案 1 :(得分:0)
所以当路径为“%temp%”时,你的代码不起作用?在这种情况下,解决方案很简单:SetACL不会执行变量扩展,而是在SetACL启动之前执行命令shell。如果直接启动SetACL而不调用cmd.exe,则永远不会发生变量扩展。
您有两种选择: