VirtualStore не работает на Vista x64 - PullRequest
1 голос
/ 06 февраля 2009

У меня есть небольшое приложение в трее, которое хочет писать в свою папку в каталоге Program Files. Я знаю, что это не окончательный дизайн, и я исправлю это, но сначала я хочу понять, как это работает.

При запуске на 32-разрядной машине Vista он записывает файлы в VirtualStore и работает так же, как и должен.

Но при установке этого на 64-битную машину Vista, я сразу получаю исключение UnauthorizedAccessException за попытку записи в каталог внутри Program Files (и Program Files (x86)).

Перенаправление VirtualStore, похоже, не работает в 64-разрядной версии Vista. Есть идеи?

Это приложение на C #, написанное в Visual Studio 2008, и я использую объект FileStream для сохранения потока на диск.

Ответы [ 3 ]

1 голос
/ 06 февраля 2009

Я бы просто исправил это сейчас. В любом случае вы никогда не должны были писать свои материалы в этот каталог, это нарушает правила. Ваш продукт не будет работать, если к серверу одновременно подключено несколько пользователей, даже до VISTA.

Vista 64-bit обнаружит, что вы 32-битное приложение, и автоматически перенаправит ваши попытки изменить "Program Files" на "Program Files x86". Фактически, это полностью заставляет вас верить, что вы работаете в 32-битной системе (см. здесь ).

Я подозреваю, что в этом слое эмуляции есть дополнительная защита от программ, пытающихся что-то изменить в Program Files. Или, может быть, ACL лучше настроены под 64-битную Vista (или более вероятный уровень эмуляции).

Итог: не делайте то, что вы делаете, Microsoft уже давно говорит нам не делать этого.

1 голос
/ 06 февраля 2009

Таким образом, я получил эту работу, скомпилировав все проекты для целевой платформы x86. Таким образом, x64 не работает с VirtualStore в Vista 64 и не компилируется в «Любой процессор». И мне пришлось установить его для всего решения (в Configuration Manager), просто настройка его для каждого отдельного проекта не сработала.

Время переписать его, используя папку AppData или IsolatedStorage. Спасибо за помощь!

1 голос
/ 06 февраля 2009

Хотите узнать больше об ошибке?
Используете ли вы инструменты sysinternals для ошибок выполнения / доступа к монитору?
Взгляните на программу просмотра событий и на ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...