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

时间:2016-04-01 06:56:55

标签: c++ winapi visual-studio-2013 application-data

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

但我的不同:

1.我有两个账户:

Admin- Administrator account
Test- Non-Administrator account

2.使用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

任何人都知道该怎么做?提前谢谢。

1 个答案:

答案 0 :(得分:1)

问题的根本原因是将VS作为“管理员”帐户运行。只要你继续这样做,%AppData%将指向该帐户的appdata文件夹。没有惊喜。

所以,你必须改变你的方法。一些选择:

  1. 您可以删除%APPDATA%上的硬连线依赖项。不要自动执行。把它放入一些配置文件并从那里读取路径。然后,您将能够在任何帐户下运行该应用程序,并将其配置为查看任何路径
  2. 您可以在调试/发布模式等中添加标志以打开/关闭该配置文件
  3. VS在提升模式下以Admin身份运行 - 好的,所以用它来编译应用程序。然后在普通帐户下运行/调试/测试您的应用程序。 VS可以作为用户X运行,app可以作为用户Y运行。由于X是Admin,VS仍然可以连接/调试Y的进程。最简单的例子:停止使用F5运行& debug,手动使用debug / attach-to和你的应用程序
  4. 最常见的情况是,VS不需要运行“管理员”。更有可能的是,它需要在更高的背景下运行。确保您的帐户位于管理员组/ etc中,然后在高程打开时自行运行VS.如果一切正常,它将以“管理员权限”作为您的帐户运行。
  5. 为什么你甚至需要升高VS?这不正常。无论谁告诉你,在99.9%的情况下是错误的。 “VS需要升级”的最常见情况是有人使用COM组件并使用COM自动注册。如果没有管理员权限,您无法重新注册/取消注册COM组件,因此您可以以管理员身份运行VS.错误。编写一个小批量/ exe /脚本来取消/注册该组件,将其标记为需要提升,将其添加到pre / postbuild步骤或msbuild任务,并且VS可以再次神奇地继续在用户级别运行
  6. 依此类推..有很多选择,一切都取决于你愿意改变你的方法论。

    关于第四个:试试这个 - 在开始菜单中找到'Commandline'(cmd.exe)的快捷方式。右键单击它。您应该看到选项“以管理员身份运行”(不是“以其他用户身份运行...”)使用它。控制台打开后,写下:echo %APPDATA%并检查它是什么。它应该指向您的appdata,但在窗口标题栏上,您应该看到Administrator:CommandPrompt警告信息。现在写start cmd.exe。应该弹出另一个管理控制台,证明该高程传播到子进程。检查新控制台中的APPDATA,它应该仍然是你的。那只是一个考验。

    如果控制台工作并传播了提升和环境变量,那么您还应该能够直接在VisualStudio图标上选择“以管理员身份运行”。这就是全部。