2013-04-02 4 views
0

Вопрос: Что эквивалентно [INSTALLDIR] для % ProgramFiles (x86)% для использования в реестре в 64-битной машине?Путь% ProgramFiles (x86)% в 64-разрядной машине (для реестра)

У меня есть программа, которая будет установлена ​​внутри % ProgramFiles (x86)% в 64-разрядной машине.

В принципе, я хочу, чтобы добавить эти значения в реестре

Имя значения:

(Default) 

Значение:

"C:\Program Files (x86)\MyApp\MyApp.exe" "%1" 

Приведенные выше данные Значение работает просто отлично, но я не могу использовать точный путь, поскольку Windows может быть установлена ​​в другом каталоге, отличном от C: \

Я попытался

Значение:

"[INSTALLDIR]MyApp.exe" "%1" 

но это дает приложение не найдено ошибку.

Что я могу использовать, чтобы получить путь к% ProgramFiles (x86)% в реестре? Любая помощь будет действительно оценена.

ответ

2

Если установщик отмечен x64, вы можете использовать свойство ProgramFilesFolder установки:

"[ProgramFilesFolder]MyApp\MyApp.exe" "%1" 

В режиме x64, это свойство будет указывать на x86 Папка Program Files, а ProgramFiles64Folder будет указывать на x64 Папка Program Files.

EDIT: Если импортировать reg файл в реестр вместо того, чтобы инсталлятор генерировать ключи и значение, вы можете использовать переменные окружения вместо:

"%ProgramFiles(x86)%\MyApp\MyApp.exe" "%1" 
+0

Я пробовал это и получил эту ошибку. Windows не может получить доступ к указанному устройству, пути или файлу. У вас могут не быть соответствующие разрешения для доступа к этому элементу. – Butters

+0

@Butters, вы имеете в виду, что установщик не заменил это свойство своим значением при генерации ключа реестра? –

+0

Существует множество ключей/значений, которые нужно создать. Итак, я в основном запускаю MyRegistryFile.reg inorder для создания всех этих ключей/значений в реестре. и Да, "[ProgramFilesFolder] MyApp \ MyApp.exe" "% 1" точно так же, как и в реестре – Butters

0

[INSTALLDIR] содержит название вашей заявки. Так оно переводится в

C:\Program Files (x86)\MyApp\MyApp\MyApp.exe в вашем примере. Попробуйте использовать

"[INSTALLDIR]MyApp.exe" "%1" 
+0

Ладно, я пытался " [INSTALLDIR] MyApp.exe ""% 1 ", а также" [INSTALLDIR] ""% 1 ", но оба раза он говорит, что приложение не найдено – Butters

2

Возможно дублировать here.

static string ProgramFilesx86() 
{ 
    if(8 == IntPtr.Size 
     || (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432")))) 
    { 
     return Environment.GetEnvironmentVariable("ProgramFiles(x86)"); 
    } 

    return Environment.GetEnvironmentVariable("ProgramFiles"); 
} 
+0

Я хочу добавить это в реестр. так что это было бы не очень полезно. – Butters

+0

В основном я хочу знать, что можно использовать вместо C: \ Program Files (x86) \ in registry – Butters

+0

@Butters. Это создаст путь, который вы могли бы создать строку, которую затем можно было бы разместить в реестре. Хотя проверка архитектуры операционной системы не требуется «Среда.GetEnvironmentVariable («ProgramFiles (x86)»); 'всегда будет возвращать правильный системный путь. –

0
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) 
+0

Не полезно в этом контексте. Хотите добавить его в реестр, а не в мой код. – Butters

 Смежные вопросы

  • Нет связанных вопросов^_^