Как моя программа должна установить «Program Files (x86)»? - PullRequest
3 голосов
/ 04 декабря 2010

Просто из любопытства, если я создаю установщик программы, как мне решить, в какой каталог «Program Files» устанавливать? В 32-разрядных системах переменная среды "% programfiles%" достаточно хороша. Однако в 64-разрядных системах 32-разрядные программы не следует устанавливать в эту папку, а вместо этого в «% programfiles (x86)%», что, как я понимаю, указывает на «C: \ Program Files (x86)». Мой вопрос: как установщик должен решить, какую переменную среды использовать? Изменится ли значение «% programfiles%» для 32-разрядного приложения, или я всегда должен сначала проверить, существует ли «% programfiles (x86)%» перед использованием «% programfiles%», или мне следует сделать что-то совсем другое? 1001 *

Спасибо! Это просто мое любопытство, так как я пытаюсь привыкнуть к 64-битным операционным системам.

Ответы [ 2 ]

4 голосов
/ 04 декабря 2010

Я почти уверен, что где-то читал, что Windows сделала это для вас автоматически. Другими словами, если бы ваш установщик был 32-разрядным, он был бы перенаправлен в каталог x86, даже если вы пытались установить в Program Files.

Я уверен, что прочитал это в «Старом Новом», но вот ссылка , которая поддерживает конфликт, пока я не смогу его найти.


Ах, да, вот оно , из когда-либо полезных Раймонд Чен .

Commenter Koro пишет программу установки в форме 32-разрядной программы, которая обнаруживает, что она работает в 64-разрядной системе, и хочет скопировать файлы (и предположительно установить записи реестра и выполнить другие действия по установке) в битовые каталоги, но уровень эмуляции перенаправляет операции в 32-битные местоположения. Вопрос: «Как найти каталог программных файлов x64 из 32-разрядного приложения?»

Ответ: «Лучше работать с системой, чем с ней». Если вы 32-битная программа, вы будете бороться с эмулятором каждый раз, когда пытаетесь взаимодействовать с внешним миром. Вместо этого просто перекомпилируйте ваш установщик как 64-битную программу. Пусть 32-разрядный установщик определит, что он работает в 64-разрядной системе, и вместо этого запустит 64-разрядный установщик. 64-разрядный установщик не будет работать на уровне 32-разрядной эмуляции, поэтому при попытке скопировать файл или обновить раздел реестра он увидит настоящую 64-разрядную файловую систему и настоящий 64-разрядный реестр.

4 голосов
/ 04 декабря 2010

Когда 32-разрядная программа (установщик в вашем случае) просит систему разрешить константу ProgramFilePath (проверьте точное имя в MSDN), система не возвращает файлы C: \ Program, но C: \ Program файлы (x86). Так что решает система, а не приложение.

...