即使app.manifest设置为以管理员身份运行程序,也会获得“访问路径...被拒绝”

时间:2012-12-21 17:12:50

标签: c# uac

当我收到路径被拒绝的错误时,我正在尝试从桌面删除文件夹。我甚至让我的app.manifest以管理员身份启动程序。现在使用下面的代码我可以成功删除该文件夹,但它似乎是不必要的。

  string folder = "c:\\users\\jim\\desktop\\Proto";
  ProcessStartInfo process = new ProcessStartInfo("cmd.exe", @"/C " + @"rmdir " + folder + " /s /q");
  process.Verb = "runas";
  Process p = Process.Start(process);
  p.WaitForExit();

我试图使用......

  string folder = "c:\\users\\jim\\desktop\\Proto";
  Directory.Delete(folder, true);

是否可以将该方法设为“runas”?

3 个答案:

答案 0 :(得分:2)

据我所知,只提升一个呼叫/命令是不可能的。您必须启动可能被UAC阻止的新进程。有些程序似乎不这样做(例如不同的Windows对话框),但它们只是在后台使用不同的参数调用另一个进程(或它们自己的可执行文件)。

除此之外:默认情况下,您应该可以完全访问自己桌面上的所有内容。或者您是否正在尝试修改其他用户的桌面?

答案 1 :(得分:1)

首先,运行应用程序的用户应该能够在自己的桌面上创建一个文件夹。

如果以上是这种情况摆脱你放入清单但不使用硬编码路径的东西

String desktopFolder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);

Directory.Delete(Path.Combine(desktopFolder,"proto");

如果正在为另一个其他用户删除此文件夹(并且管理员是另一个用户,无论是否提升),那么你必须一直以高架运行(不是一个好主意),或者当你启动另一个用户时提升权限的过程。

答案 2 :(得分:0)

查看this,它会向您展示如何以管理员用户身份运行单个方法