0

我知道有很多类似的问题,比如如何获取 %AppData% 路径

但我的不一样:

1.我有两个账号:

Admin- Administrator account
Test- Non-Administrator account

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

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

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

有谁知道该怎么做?提前致谢。

4

1 回答 1

1

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

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

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

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

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

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

于 2016-04-01T07:58:01.670 回答