Inno设置-32位和64位寄存器

问题描述 投票:0回答:1

此问题仅在我注册我的文件类型时才出现:

; Register File Types 32 bit
Root: HKCR; SubKey: ".mwb"; ValueType: string; ValueData: "MeetingScheduleAssistant.MeetingWorkBook"; Flags: uninsdeletekey
Root: HKCR; SubKey: "MeetingScheduleAssistant.MeetingWorkBook"; ValueType: string; ValueData: "Meeting Workbook"; Flags: uninsdeletekey
Root: HKCR; SubKey: "MeetingScheduleAssistant.MeetingWorkBook\Shell\Open\Command"; ValueType: string; ValueData: """{app}\MeetSchedAssist.exe"" ""%1"""; Flags: uninsdeletekey
Root: HKCR; Subkey: "MeetingScheduleAssistant.MeetingWorkBook\DefaultIcon"; ValueType: string; ValueData: "{app}\MeetSchedAssist.exe,0"; Flags: uninsdeletevalue

Root: HKCR; SubKey: ".srr"; ValueType: string; ValueData: "MeetingScheduleAssistant.SoundRotaReport"; Flags: uninsdeletekey
Root: HKCR; SubKey: "MeetingScheduleAssistant.SoundRotaReport"; ValueType: string; ValueData: "Sound Rota Report"; Flags: uninsdeletekey
Root: HKCR; SubKey: "MeetingScheduleAssistant.SoundRotaReport\Shell\Open\Command"; ValueType: string; ValueData: """{app}\MeetSchedAssist.exe"" ""%1"""; Flags: uninsdeletekey
Root: HKCR; Subkey: "MeetingScheduleAssistant.SoundRotaReport\DefaultIcon"; ValueType: string; ValueData: "{app},1"; Flags: uninsdeletevalue

我的安装程序附带上述32位exe,但它也具有_64x可执行文件。从这两种环境进行注册的正确方法是什么?我是否只复制代码,像这样:

; Register File Types 32 bit
Root: HKCR; SubKey: ".mwb"; ValueType: string; ValueData: "MeetingScheduleAssistant.MeetingWorkBook32"; Flags: uninsdeletekey
Root: HKCR; SubKey: "MeetingScheduleAssistant.MeetingWorkBook32"; ValueType: string; ValueData: "Meeting Workbook"; Flags: uninsdeletekey
Root: HKCR; SubKey: "MeetingScheduleAssistant.MeetingWorkBook32\Shell\Open\Command"; ValueType: string; ValueData: """{app}\MeetSchedAssist.exe"" ""%1"""; Flags: uninsdeletekey
Root: HKCR; Subkey: "MeetingScheduleAssistant.MeetingWorkBook32\DefaultIcon"; ValueType: string; ValueData: "{app}\MeetSchedAssist.exe,0"; Flags: uninsdeletevalue

Root: HKCR; SubKey: ".srr"; ValueType: string; ValueData: "MeetingScheduleAssistant.SoundRotaReport32"; Flags: uninsdeletekey
Root: HKCR; SubKey: "MeetingScheduleAssistant.SoundRotaReport32"; ValueType: string; ValueData: "Sound Rota Report"; Flags: uninsdeletekey
Root: HKCR; SubKey: "MeetingScheduleAssistant.SoundRotaReport32\Shell\Open\Command"; ValueType: string; ValueData: """{app}\MeetSchedAssist.exe"" ""%1"""; Flags: uninsdeletekey
Root: HKCR; Subkey: "MeetingScheduleAssistant.SoundRotaReport32\DefaultIcon"; ValueType: string; ValueData: "{app},0"; Flags: uninsdeletevalue

; Register File Types 64 bit
Root: HKCR; SubKey: ".mwb"; ValueType: string; ValueData: "MeetingScheduleAssistant.MeetingWorkBook64"; Flags: uninsdeletekey
Root: HKCR; SubKey: "MeetingScheduleAssistant.MeetingWorkBook64"; ValueType: string; ValueData: "Meeting Workbook"; Flags: uninsdeletekey
Root: HKCR; SubKey: "MeetingScheduleAssistant.MeetingWorkBook64\Shell\Open\Command"; ValueType: string; ValueData: """{app}\MeetSchedAssist_x64.exe"" ""%1"""; Flags: uninsdeletekey
Root: HKCR; Subkey: "MeetingScheduleAssistant.MeetingWorkBook64\DefaultIcon"; ValueType: string; ValueData: "{app}\MeetSchedAssist_x64.exe,0"; Flags: uninsdeletevalue

Root: HKCR; SubKey: ".srr"; ValueType: string; ValueData: "MeetingScheduleAssistant.SoundRotaReport64"; Flags: uninsdeletekey
Root: HKCR; SubKey: "MeetingScheduleAssistant.SoundRotaReport64"; ValueType: string; ValueData: "Sound Rota Report"; Flags: uninsdeletekey
Root: HKCR; SubKey: "MeetingScheduleAssistant.SoundRotaReport64\Shell\Open\Command"; ValueType: string; ValueData: """{app}\MeetSchedAssist_x64.exe"" ""%1"""; Flags: uninsdeletekey
Root: HKCR; Subkey: "MeetingScheduleAssistant.SoundRotaReport64\DefaultIcon"; ValueType: string; ValueData: "{app}\MeetSchedAssist_x64.exe,0"; Flags: uninsdeletevalue

我看不到它将如何工作,因为用户双击了文件,所以它如何知道要使用哪个exe文件?


根据到目前为止提供的答案,我决定尝试使用较新的方法,因为我的程序需要Windows 7或更高版本。所以到目前为止,我有这段代码:

[Registry]
; Create the application capability key
Root: HKLM; Subkey: "Software\TruckleSoft"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "Software\TruckleSoft\Meeting Schedule Assistant"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "Software\TruckleSoft\Meeting Schedule Assistant\Capability"; ValueType: string; ValueName: "ApplicationDescription"; ValueData: "Use Meeting Schedule Assistant to create a variety of assignment schedules."; Flags: uninsdeletevalue
Root: HKLM; Subkey: "Software\TruckleSoft\Meeting Schedule Assistant\Capability"; ValueType: string; ValueName: "ApplicationName"; ValueData: "Meeting Schedule Assistant"; Flags: uninsdeletevalue
; List of extensions the application supports
Root: HKLM; Subkey: "Software\TruckleSoft\Meeting Schedule Assistant\Capability\FileAssociations"; ValueType: string; ValueName: ".mwb"; ValueData: "MeetingScheduleAssistant.MeetingWorkBook"; Flags: uninsdeletevalue
Root: HKLM; Subkey: "Software\TruckleSoft\Meeting Schedule Assistant\Capability\FileAssociations"; ValueType: string; ValueName: ".srr"; ValueData: "MeetingScheduleAssistant.SoundRotaReport"; Flags: uninsdeletevalue

; Add the capability key to list of registered applications
Root: HKLM; Subkey: "Software\RegisteredApplications"; ValueType: string; ValueName: "Meeting Schedule Assistant"; ValueData: "Software\TruckleSoft\Meeting Schedule Assistant\Capability"; Flags: uninsdeletevalue

; For each extension that the application supports
Root: HKCR; Subkey: "MeetingScheduleAssistant.MeetingWorkBook"; Flags: uninsdeletekeyifempty
Root: HKCR; Subkey: "MeetingScheduleAssistant.MeetingWorkBook"; ValueType: string; ValueName: ""; ValueData: "Meeting Workbook"; Flags: uninsdeletevalue
Root: HKCR; Subkey: "MeetingScheduleAssistant.MeetingWorkBook\DefaultIcon"; Flags: uninsdeletekeyifempty
Root: HKCR; Subkey: "MeetingScheduleAssistant.MeetingWorkBook\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\MeetSchedAssist.exe,1"; Flags: uninsdeletevalue
Root: HKCR; Subkey: "MeetingScheduleAssistant.MeetingWorkBook\Shell"; Flags: uninsdeletekeyifempty
Root: HKCR; Subkey: "MeetingScheduleAssistant.MeetingWorkBook\Shell\open"; Flags: uninsdeletekeyifempty
Root: HKCR; Subkey: "MeetingScheduleAssistant.MeetingWorkBook\Shell\open\Command"; Flags: uninsdeletekeyifempty
Root: HKCR; Subkey: "MeetingScheduleAssistant.MeetingWorkBook\Shell\open\Command"; ValueType: string; ValueName: ""; ValueData: """{app}\MeetSchedAssist.exe"" ""%1"""; Flags: uninsdeletevalue

Root: HKCR; Subkey: "MeetingScheduleAssistant.SoundRotaReport"; Flags: uninsdeletekeyifempty
Root: HKCR; Subkey: "MeetingScheduleAssistant.SoundRotaReport"; ValueType: string; ValueName: ""; ValueData: "Meeting Workbook"; Flags: uninsdeletevalue
Root: HKCR; Subkey: "MeetingScheduleAssistant.SoundRotaReport\DefaultIcon"; Flags: uninsdeletekeyifempty
Root: HKCR; Subkey: "MeetingScheduleAssistant.SoundRotaReport\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\MeetSchedAssist.exe,1"; Flags: uninsdeletevalue
Root: HKCR; Subkey: "MeetingScheduleAssistant.SoundRotaReport\Shell"; Flags: uninsdeletekeyifempty
Root: HKCR; Subkey: "MeetingScheduleAssistant.SoundRotaReport\Shell\open"; Flags: uninsdeletekeyifempty
Root: HKCR; Subkey: "MeetingScheduleAssistant.SoundRotaReport\Shell\open\Command"; Flags: uninsdeletekeyifempty
Root: HKCR; Subkey: "MeetingScheduleAssistant.SoundRotaReport\Shell\open\Command"; ValueType: string; ValueName: ""; ValueData: """{app}\MeetSchedAssist.exe"" ""%1"""; Flags: uninsdeletevalue

我还应该做些什么来简化64位版本?

inno-setup 32bit-64bit file-association
1个回答
2
投票

如果使用现代方法注册关联,则可以注册多个应用程序(因此您的应用程序是32位和64位版本)。然后,系统将在第一次用户尝试打开相应的文件类型时提示用户选择要使用的应用程序。另外,用户将能够在控制面板(或Windows 10设置应用程序)中更改决定。

请参见Inno Setup: Extending Windows default apps list

您将必须为两个版本重复整个注册(软件和关联均具有唯一的ID)。您可以使用preprocessor来避免重复代码。

至少需要Windows Vista。


如果您想坚持使用注册应用程序的方式(或者如果您需要支持Windows的较早版本,则只需要注册一个版本的应用程序。根据系统的位数或根据用户的喜好。

您可以在scripted constant中使用[Registry] section

[Registry]

要根据系统的位数选择可执行文件,请使用[Registry] ... Root: HKCR; SubKey: "MeetingScheduleAssistant.MeetingWorkBook32\Shell\Open\Command"; \ ValueType: string; ValueData: """{app}\{code:GetExecutableToRegister}"" ""%1"""; \ Flags: uninsdeletekey ...

IsWin64 function

要根据用户喜好选择可执行文件,可以使用IsWin64[Code] function GetExecutableToRegister(Param: string): string; begin if IsWin64 then Result := 'MeetSchedAssist_x64.exe' else Result := 'MeetSchedAssist.exe'; end;

[Tasks]
[Tasks]

(unested)

更新

我设法开始使用此代码:

WizardIsTaskSelected function

以上使用任务。尽管我对任务有单独的问题,并且由于某种原因“桌面”没有刷新。但是以上工作。使用新系统失败。

© www.soinside.com 2019 - 2024. All rights reserved.