Я использую скрипт Inno Setup для установки 32-разрядных и 64-разрядных DLL-файлов в 64-разрядной версии. Я могу получить 64-битный путь из реестра, но 32-битный путь отсутствует, не существует. Тем не менее, я знаю, что «хвост» пути является постоянным, просто нужно изменить голову. Т.е.,Inno Setup StringChangeEx Failure
64-bit (from registry) = c:\Program Files\My Application\Bin
32-bit (derived) = c:\Program Files (x86)\My Application\Bin
Так что я делаю, это замена из 64-битного пути к файлу программы с 32-битным. Я делаю это легко с помощью StringChangeEx:
RegQueryStringValue(HKLM, 'SOFTWARE\My Application', 'RootDir', sPath)
if IsWin64() then
StringChangeEx(sPath, ExpandConstant('{pf}'), ExpandConstant('{pf32}'), False);
sPath возвращается с моей 32-битной дорожкой. Это отлично работает на большинстве систем, но кажется, что иногда StringChangeEx не заменяет «C: \ Program Files» для «C: \ Program Files (x86)». Я проверил (используя MsgBox), что константы {pf} и {pf32} - это то, что я думаю. Корпус одинаков и нет ведущих/конечных пространств. Просто кажется, что в некоторых системах функция не работает.
Я использую последнюю версию InnoSetup (10/2010). На веб-сайте не упоминаются проблемы с этой функцией. Кто-нибудь еще видел это и/или имел какие-либо идеи о том, что это может быть?
Примите этот ответ, если он решит вашу проблему. – Bernard