winapi — c ++, как получить путь% AppData% под учетной записью без прав администратора и запустить VS2013 в качестве администратора

Я знаю, что есть много подобных вопросов, таких как этот как получить% 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)))
{
//....
}

Но фактическая стоимость szPath является C:\Users\Admin\AppData\Roamingне C:\Users\Test\AppData\Roaming что я хотел.

Кто-нибудь знает, как это сделать? Заранее спасибо.

0

Решение

Основная причина вашей проблемы — запуск VS от имени администратора. Пока вы продолжаете делать это,% AppData% будет указывать на папку appdata этой учетной записи. Нет сюрпризов.

Итак, вы должны изменить свой подход. Некоторые варианты:

  1. Вы можете удалить аппаратную зависимость от% APPDATA%. Не делай этого автоматически. Поместите это в какой-нибудь файл конфигурации и прочитайте путь оттуда. После этого вы сможете запускать приложение под любой учетной записью и настраивать его на любой путь.
  2. Вы можете добавить флаги для включения / выключения этого конфигурационного файла в режимах отладки / выпуска и т. д.
  3. VS работает от имени администратора в повышенном режиме — хорошо, так что используйте его для компиляции приложения. Затем запустите / отладьте / протестируйте свое приложение под своей обычной учетной записью. VS может быть запущен от имени пользователя X, а приложение может работать от имени пользователя Y. Поскольку X является администратором, VS все равно сможет подключать / отлаживать процессы Y. Простейший пример: прекратите использовать F5 для запуска&отладка, используйте debug / attach-to и ваше приложение вручную
  4. чаще всего VS не нужно запускать «Admin». Скорее всего, он должен работать в повышенном контексте. Убедитесь, что ваша учетная запись находится в группе администраторов / и т. Д., А затем запустите учетную запись VS с правами администратора. Если все в порядке, он будет работать с правами администратора в качестве вашей учетной записи.
  5. зачем вам вообще нужно повышать VS? Это не нормально Кто бы вам ни сказал, в 99,9% случаев это неправильно. Наиболее распространенный случай, когда «VS необходимо повысить» — это когда кто-то работает с компонентами COM и использует авторегистрацию COM. Вы не можете перерегистрировать COM-компонент без прав администратора, поэтому вы можете запустить VS от имени администратора. Неправильно. Напишите небольшой пакет / exe / скрипт, который будет отменять / регистрировать этот компонент, помечать его как требующий повышения прав, добавлять его к шагу до / после сборки или задаче msbuild, и VS может волшебным образом продолжать работать на уровне пользователя снова

и так далее .. вариантов много, все зависит от того, что вы готовы изменить в своей методологии ..

в отношении четвертого: попробуйте эту вещь — найдите ярлык «Командная строка» (cmd.exe) в меню «Пуск». Щелкните правой кнопкой мыши по нему. Вы должны увидеть опцию «Запуск от имени администратора» (НЕ «Запуск от имени другого пользователя …»). Используйте ее. Когда консоль откроется, напишите: echo %APPDATA% и проверь что это. Он должен указывать на ВАШИ данные приложения, но в строке заголовка окна вы должны увидеть Administrator:CommandPrompt предупреждающая информация Теперь пиши start cmd.exe, Должна появиться другая консоль администратора, доказывающая, что повышение прав распространяется на дочерние процессы. Проверьте APPDATA в новой консоли, она все равно должна быть вашей. Это было просто испытание.

Если консоль работала и распространяла высоту и переменные, то вы также можете выбрать «Запуск от имени администратора» непосредственно на значке VisualStudio. И это все.

1

Другие решения

Других решений пока нет …