UAC и перенаправление файловой системы связаны, но различаются.
Контроль учетных записей пользователей - это защита, основанная на разрешениях, для предотвращения несанкционированного изменения вашей файловой системы или запуска приложений, которые могут повлиять на других пользователей. Подсказка позволяет вам переопределить безопасность, временно предоставив привилегии администратора, если это было вашим намерением.
Перенаправление файловой системы обеспечивает обратную совместимость с 32-битными приложениями благодаря наличию зеркальных 32-битных системных папок и реестра. Фактически, если действие приводит к тому, что UAC не запускает перенаправление, в этом случае он всегда будет пытаться использовать 64-битную версию файла. Если вы не укажете каталог перенаправления явно или не запустите 32-битное приложение с правами администратора для обхода UAC.
Хорошо, это говорит о том, что вы используете относительный путь, поэтому он будет искать файл в текущем каталоге для процесса. Если он скомпилирован как 32-разрядный процесс, выполняющийся в системах с разными архитектурами, он может не работать должным образом из-за вышеупомянутого перенаправления.
Вы можете использовать GetCurrentDirectory Windows API, чтобы увидеть, какой каталог использует текущий процесс, и убедиться, что он соответствует вашим ожиданиям. Если нет, у вас есть несколько вариантов.
- Самый простой способ - использовать полные пути к файлам.
- У вас также может быть две сборки, одна из которых предназначена для каждой архитектуры, на которой вы собираетесь развернуть. В конце концов, если вы работаете в 64-битной системе, вы также можете развернуть 64-битные приложения.
- Более сложным вариантом будет создание подкласса
CFileDialog
и отключение перенаправления путем вызова Wow64DisableWow64FsRedirection
в конструкторе и Wow64RevertWow64FsRedirection
в десктрукторе. Однако это должен быть системный параметр, поэтому вы можете столкнуться с новыми проблемами, принудительно установив 32-битное приложение в 64-битных окнах.
Вероятно, существует множество других вариантов, так как обычно существует много способов снять шкуру с кошки. Однако первым шагом является установка некоторого кода отладки и проверка или устранение перенаправления как виновника с GetCurrentDirectory