【问题标题】:ShellExecute get access to open folderShellExecute 访问打开的文件夹
【发布时间】:2012-08-31 15:15:39
【问题描述】:

我正在使用ShellExecute(NULL, L"open", szSomeDirectory, 0, 0, SW_SHOWDEFAULT) 在资源管理器中打开一个目录。

我正在尝试打开一个通常会提示我 You currently do not have permission to access this folder. 的目录,并允许我选择获取访问权限并显示 UAC 提示。

当我执行 ShellExecute 时,资源管理器给我一条错误消息,说 Access Denied

我的程序以管理员权限运行,但这似乎无关紧要。

我怎样才能获得打开这个文件夹的权限?

【问题讨论】:

  • 尝试右键单击程序.exe 并选择Run As administrator。根据您的操作系统,即使您以管理员身份登录,也必然意味着您启动的所有进程都以提升的权限运行。
  • 我试过了。我认为因为"open" 动词只是告诉资源管理器导航到目录。 Explorer 正在给我拒绝访问的消息。
  • 您可能需要提升资源管理器。应该这样做:ShellExecute(NULL, L"runas", L"explorer", szSomeDirectory, 0, SW_SHOWDEFAULT)
  • 不幸的是,这不起作用。也许这会有所帮助:`C:\Dir1\Dir2\Dir3` - Dir2 默认情况下我无权访问。我正在尝试在我的程序中打开 Dir3。

标签: c++ windows winapi shellexecute


【解决方案1】:

想通了。

我的用户帐户无权访问该文件。

我的解决方案是在ShellExecute 之前使用AccessCheck 来查看我是否可以访问该文件,如果无法访问,请使用SetNamedSecurityInfo 为具有完全访问权限的登录用户帐户添加一个ACE。

【讨论】:

    【解决方案2】:

    您可以在程序的链接器清单中设置 UAC 级别。

    看看这个:Strange file-permissions if apps run as administrator

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多