Если вы используете современный метод регистрации ассоциаций, вы можете зарегистрировать несколько приложений (как 32-битные, так и 64-битные версии вашего приложения). Затем система предложит пользователю выбрать, какое приложение использовать, когда пользователь впервые попытается открыть файл соответствующего типа. Кроме того, пользователь сможет изменить решение в Панели управления (или в приложении Windows 10 Настройки).
См. Inno Setup: Расширение Windows списка приложений по умолчанию
Вам придется повторить всю регистрацию для обеих версий (с уникальными идентификаторами как для программного обеспечения, так и для ассоциаций). Вы можете использовать препроцессор , чтобы не повторять код.
Для этого требуется Windows Vista как минимум.
Если вы хотите придерживаться своего пути чтобы зарегистрировать приложение (или если вам нужна поддержка более старых версий Windows), вам нужно будет зарегистрировать только одну версию вашего приложения. Либо в соответствии с разрядностью системы, либо в соответствии с предпочтениями пользователя.
Вы можете использовать константу сценария в разделе [Registry]
:
[Registry]
...
Root: HKCR; SubKey: "MeetingScheduleAssistant.MeetingWorkBook32\Shell\Open\Command"; \
ValueType: string; ValueData: """{app}\{code:GetExecutableToRegister}"" ""%1"""; \
Flags: uninsdeletekey
...
Чтобы выбрать исполняемый файл в соответствии с разрядностью системы, используйте IsWin64
функцию :
[Code]
function GetExecutableToRegister(Param: string): string;
begin
if IsWin64 then
Result := 'MeetSchedAssist_x64.exe'
else
Result := 'MeetSchedAssist.exe';
end;
Чтобы выбрать исполняемый файл в соответствии с предпочтениями пользователя, вы можете использовать [Tasks]
и WizardIsTaskSelected
функция :
[Tasks]
Name: register32; Description: "Register 32-bit executable"; Check: IsWin64; \
flags: unchecked;
Name: register64; Description: "Register 64-bit executable"; Check: IsWin64
[Code]
function GetExecutableToRegister(Param: string): string;
begin
if IsWin64 and WizardIsTaskSelected('register64') then
Result := 'MeetSchedAssist_x64.exe'
else
Result := 'MeetSchedAssist.exe';
end;
(не проверено)
Обновление по OP:
Этот код, который мне удалось заставить работать:
; Register File Types
Root: HKCR; SubKey: ".mwb"; ValueType: string; ValueData: "MeetSchedAssist.MWB"; Flags: uninsdeletekey
Root: HKCR; SubKey: ".srr"; ValueType: string; ValueData: "MeetSchedAssist.SRR"; Flags: uninsdeletekey
Root: HKCR; Subkey: "MeetSchedAssist.MWB"; ValueType: string; ValueData: "Meeting Workbook Schedule"; Flags: uninsdeletekey
Root: HKCR; Subkey: "MeetSchedAssist.SRR"; ValueType: string; ValueData: "Sound Rota Report"; Flags: uninsdeletekey
Root: HKCR; SubKey: "MeetSchedAssist.MWB\Shell\Open\Command"; ValueType: string; ValueData: """{app}\{code:GetExecutableToRegister}"" ""%1"""; Flags: uninsdeletekey
Root: HKCR; SubKey: "MeetSchedAssist.SRR\Shell\Open\Command"; ValueType: string; ValueData: """{app}\{code:GetExecutableToRegister}"" ""%1"""; Flags: uninsdeletekey
В приведенном выше коде используется Tasks
. Хотя у меня по задачам отдельный вопрос, и "Рабочий стол" почему-то не обновлял sh. Но вышеперечисленное работает. Не удается использовать новую систему.