【问题标题】:Getting "Access to path... denied" even when app.manifest is set to to run program as administrator即使 app.manifest 设置为以管理员身份运行程序,也获得“访问路径...被拒绝”
【发布时间】:2012-12-09 06:51:03
【问题描述】:

当我收到路径被拒绝的错误消息时,我正在尝试从桌面上删除一个文件夹。我什至让我的 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);

是否可以使该方法“运行”?

【问题讨论】:

  • CreateDirectory 删除一个目录?
  • 我认为这只是一个错误,目标是创建和删除一个文件夹。
  • 是的,对不起。我的 C/P 问题。修好了。
  • 如果它是您自己的桌面并且是您运行该过程,那么还有其他问题。但是,您只能通过运行提升的其他进程来提升,这是一件非常非常非常好的事情。

标签: c# uac


【解决方案1】:

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

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

【讨论】:

  • 是的,但这是 OP 试图避免的。
  • @Mario,不,我只是想从我自己的桌面上删除文件夹。
  • @JimDel,代码在哪里,你已经发布了一个创建命令!
  • @Tony,对不起,Tony。我已经编辑了我的问题以反映我想删除该文件夹。
【解决方案2】:

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

如果是上述情况,请删除清单中的内容,但不要使用硬编码路径

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

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

如果此文件夹正在为另一个其他用户删除(管理员是另一个用户,无论是否提升),那么您必须一直以提升的方式运行,(不是一个好主意),或者当您启动另一个具有提升权利的流程来做提升的事情。

【讨论】:

  • 我实际上在我的代码中使用“Environment.SpecialFolder.DesktopDirectory”。为了便于阅读,我只是把它留了下来。
  • 一定是你当时没有提到的其他东西.....你大概可以自己删除桌面上的文件夹,如右键->删除?
【解决方案3】:

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

【讨论】:

  • 不,它没有。你需要开始一个新的过程来提升。
  • 这将方法标记为需要提升,因此您可以做一些聪明的事情,但它实际上并没有提升。最大的 Windows 安全改进之一是停止进程内提升,这是所有坏人都在使用的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 2017-12-07
  • 1970-01-01
相关资源
最近更新 更多