Запуск от имени администратора: доступ к пользователю VirtualStore - PullRequest
0 голосов
/ 01 апреля 2011

У меня проблема с установкой / первым запуском программного обеспечения в Vista / 7 в отношении VirtualStore.

Мое программное обеспечение написано на C #. Установщик: NSIS.

  1. Мое приложение установлено с использованием NSIS. Он работает от имени администратора
  2. После завершения установки пользователь может сразу запустить программу из установщика.
  3. Это приводит к тому, что первый запуск программы будет выполнен от имени администратора.
  4. Во время первого запуска мастер должен быть завершен. Этот мастер импортирует данные из более старой версии программного обеспечения, которая уже находится на компьютере (C: \ Program Files \ OldProgram \ Data)
  5. Однако в 7 / Vista эти данные находятся в виртуальном хранилище пользователя. Когда я являюсь администратором, я не вижу эти данные и не могу преобразовать их.

Вопросы:

  1. Могу ли я узнать, какой пользователь в данный момент вошел в систему?
  2. Существует ли общий способ доступа к виртуальному магазину этого пользователя? Учитывая, что папка "Program Files" называется по-разному, в некоторых странах мое 64-разрядное приложение находится в "Program Files (x86)".

1 Ответ

0 голосов
/ 01 апреля 2011
  1. UserInfo :: GetName даст вам имя пользователя, используйте UserMgr , если вам нужен больший контроль
  2. Windows на самом деле не предоставляет способ доступа к специальным папкам других пользователей без ихтокен, но этот вспомогательный макрос работает в большинстве случаев.Имя / местоположение виртуального хранилища не задокументировано AFAIK, поэтому вам нужно получить ближайшую специальную папку с помощью GetUserShellFolderFromRegistry, а затем жестко закодировать часть пути VirtualStore ...

Если вы хотите запуститьзапрограммируйте пользователя, а не администратора, выполняющего установку, используйте плагин UAC (или просто снимите флажок «Выполнить» на конечной странице и дайте пользователю нормально запустить программу)

...