UAC, VirtualStore и dll взаимодействуют - PullRequest
0 голосов
/ 22 февраля 2012

У меня проблема со сторонним компонентом, с которым мне приходится взаимодействовать из C # или C ++, но я не могу его контролировать.

Вот ситуация:

Сторонний компонентчасть программного обеспечения, которая записывает данные в папку «Program Files».В Win7 это означает, что для пользователей без прав администратора эти данные будут записываться в папку виртуализированных программных файлов в их профиле.Мне нужно прочитать эти данные через API, предоставленный в комплекте .dll.

При запуске стороннего инструмента с правами администратора и ящиком с отключенным UAC (фактически позволяющим доступ для записи в c: \ Program Files),Я могу читать данные из этой папки, используя стандартное взаимодействие (LoadLibrary / GetProcAddress в C ++ или P / Invoke в C #).Для ясности, в этом случае и стороннее программное обеспечение, и мой инструмент, использующий .dll, пишут / читают из C: \ Program Files (проверено с помощью Process Monitor от sysinternals).

Вот проблема:В системе с включенным контролем учетных записей стороннее программное обеспечение записывает в виртуализированную папку, но мой инструмент все еще читает из C: \ Program Files, поэтому я не могу прочитать данные.Обратите внимание, что я не могу это контролировать, так как не могу напрямую прочитать эти данные, мне нужно пройти через сторонний файл .dll!Поэтому я думаю, что мой вопрос заключается в следующем: что я могу сделать, чтобы заставить мою программу вести себя как сторонний компонент, то есть заставить ее читать из VirtualStore при работе с ограниченными привилегиями?Или мне по-другому?

1 Ответ

0 голосов
/ 11 апреля 2012

Существует 2 возможных решения для этого сценария.

  • развертывание в папке, отличной от Program Files, в соответствии с предложением @Hans Passant
  • вообще отключить UAC

Мы выбрали второй вариант, так как сторонний инструмент не предоставил способ изменения папки установки с помощью сценариев: - (

...