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 文件夹。没有惊喜。
所以,你必须改变你的方法。部分选项:
- 您可以删除对 %APPDATA% 的硬连线依赖。不要自动执行。将其放入某个配置文件并从那里读取路径。然后,您将能够 运行 任何帐户下的应用程序并将其配置为查看任何路径
- 您可以添加标志以在 debug/release 模式等 on/off 中转换该配置文件
- VS 运行s 作为管理员处于提升模式 - 好的,所以用它来编译应用程序。然后 run/debug/test 您的应用程序在您的普通帐户下。 VS 可以 运行ning 作为用户 X,应用程序可以 运行ning 作为用户 Y。由于 X 是管理员,VS 仍然能够 connect/debug Y 的进程。最简单的示例:停止使用 F5 进行 运行&debug,使用 debug/attach-to 并手动使用您的应用程序
- 大多数情况下,VS 不需要 运行 'Admin'。更有可能的是,它需要在提升的上下文中 运行。确保您的帐户在管理员 group/etc 中,然后像您一样以 VS 身份运行并提升权限。如果一切正常,它将 运行 与 "admin rights" 作为您的帐户。
- 为什么还需要提升 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"。仅此而已。
我知道有很多类似的问题,比如这个 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 文件夹。没有惊喜。
所以,你必须改变你的方法。部分选项:
- 您可以删除对 %APPDATA% 的硬连线依赖。不要自动执行。将其放入某个配置文件并从那里读取路径。然后,您将能够 运行 任何帐户下的应用程序并将其配置为查看任何路径
- 您可以添加标志以在 debug/release 模式等 on/off 中转换该配置文件
- VS 运行s 作为管理员处于提升模式 - 好的,所以用它来编译应用程序。然后 run/debug/test 您的应用程序在您的普通帐户下。 VS 可以 运行ning 作为用户 X,应用程序可以 运行ning 作为用户 Y。由于 X 是管理员,VS 仍然能够 connect/debug Y 的进程。最简单的示例:停止使用 F5 进行 运行&debug,使用 debug/attach-to 并手动使用您的应用程序
- 大多数情况下,VS 不需要 运行 'Admin'。更有可能的是,它需要在提升的上下文中 运行。确保您的帐户在管理员 group/etc 中,然后像您一样以 VS 身份运行并提升权限。如果一切正常,它将 运行 与 "admin rights" 作为您的帐户。
- 为什么还需要提升 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"。仅此而已。