c++ 如何在非管理员帐户和 运行 VS2013 下以管理员身份获取 %AppData% 路径

c++ how to get %AppData% path under non-administrator account and running VS2013 as Administrator

我知道有很多类似的问题,比如这个 how to get %AppData% path

但我的不一样:

1.I 有两个帐号:

Admin- Administrator account
Test- Non-Administrator account

2.Run 我的项目以管理员身份使用 VS2013,导致该项目需要提升权限。然后使用以下代码片段获取 appdata 路径:

TCHAR szPath[MAX_PATH];
if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, szPath)))
{
    //....
}

但是szPath的实际值是C:\Users\Admin\AppData\Roaming,而不是我想要的C:\Users\Test\AppData\Roaming

有人知道怎么做吗?提前致谢。

你的问题的根本原因是运行宁VS作为"Admin"帐户。只要您继续这样做,%AppData% 就会指向该帐户的 appdata 文件夹。没有惊喜。

所以,你必须改变你的方法。部分选项:

  1. 您可以删除对 %APPDATA% 的硬连线依赖。不要自动执行。将其放入某个配置文件并从那里读取路径。然后,您将能够 运行 任何帐户下的应用程序并将其配置为查看任何路径
  2. 您可以添加标志以在 debug/release 模式等 on/off 中转换该配置文件
  3. VS 运行s 作为管理员处于提升模式 - 好的,所以用它来编译应用程序。然后 run/debug/test 您的应用程序在您的普通帐户下。 VS 可以 运行ning 作为用户 X,应用程序可以 运行ning 作为用户 Y。由于 X 是管理员,VS 仍然能够 connect/debug Y 的进程。最简单的示例:停止使用 F5 进行 运行&debug,使用 debug/attach-to 并手动使用您的应用程序
  4. 大多数情况下,VS 不需要 运行 'Admin'。更有可能的是,它需要在提升的上下文中 运行。确保您的帐户在管理员 group/etc 中,然后像您一样以 VS 身份运行并提升权限。如果一切正常,它将 运行 与 "admin rights" 作为您的帐户。
  5. 为什么还需要提升 VS?这不正常。谁告诉你的,在 99.9% 的情况下都是错误的。 "VS needs to be elevated" 最常见的情况是有人在 COM 组件上工作并使用 COM 自动注册。您不能 re/un-register 没有管理员权限的 COM 组件,所以是的 运行 VS 作为管理员。错误的。写一个小 batch/exe/script 将 un/register 该组件,将其标记为需要提升,将其添加到 pre/postbuild 步骤或 msbuild 任务,然后 VS 可以神奇地保持 运行ning 在用户再次升级

等等..有很多选择,一切都取决于你愿意改变你的方法..

关于第 4 个:试试这个 - 在开始菜单中找到 'Commandline' (cmd.exe) 的快捷方式。 Right-click就可以了。您应该看到选项 "Run as administrator"(不是 "Run as other user..")使用它。控制台打开后,写入:echo %APPDATA% 并检查它是什么。它应该指向您的应用程序数据,但在 window 标题栏上您应该看到 Administrator:CommandPrompt 警告信息。现在写start cmd.exe。另一个 admin-console 应该弹出证明提升传播到 child 进程。在新控制台查看APPDATA,应该还是你的。那只是一个测试。

如果控制台工作并传播了海拔和环境变量,那么您应该也可以直接在 VisualStudio 图标上选择 "Run as administrator"。仅此而已。