Проверка наличия файла на 64-битной машине Vista с 32-битной программой - PullRequest
2 голосов
/ 05 января 2010

Итак, у меня есть 32-битная программа, которая должна проверить, существуют ли файлы. Однако местоположения (которые могут быть как из ярлыков, так и из реестра) часто используют строки среды. Я использую API ExpandEnvironmentStrings для их расширения, а затем проверяю, существует ли файл. Однако, поскольку это 32-разрядное приложение (примечание эмуляция строк окружения ), в некоторых случаях пути расширяются до неправильных местоположений. Поскольку я не знаю, являются ли указанные мной пути 32-битными или 64-битными, одно простое решение - просто расширить соответствующие строки среды (ProgramFiles и CommonProgramFiles), используя как 64-битные, так и 32-битные местоположения вручную. Тем не менее, это кажется немного хакерским. Есть ли лучший способ?

1 Ответ

2 голосов
/ 06 января 2010

Возможно Перенаправитель файловой системы будет полезен. В частности, смотрите описание функции Wow64DisableWow64FsRedirection и ее близких друзей.

Даже в этом случае вам, вероятно, потребуется выполнить некоторые проверки, чтобы определить, какие строки нужно расширить, и хотите ли вы 32- или 64-разрядное расширение. Для этого я подозреваю, что простая таблица строк не поможет. Как вы говорите,% ProgramFiles% может означать 32-битный путь в некоторых случаях и 64-битный путь в других.

...