Inno Setup-同时注册32位和64位

安德鲁·特拉克(Andrew Truckle)

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

; 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文件?

马丁·普里克里(Martin Prikryl)

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

请参阅Inno设置:扩展Windows默认应用程序列表

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

至少需要Windows Vista。


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

您可以在以下部分中使用脚本化常量[Registry]

[Registry]
...
Root: HKCR; SubKey: "MeetingScheduleAssistant.MeetingWorkBook32\Shell\Open\Command"; \
    ValueType: string; ValueData: """{app}\{code:GetExecutableToRegister}"" ""%1"""; \
    Flags: uninsdeletekey
...

要根据系统的位数选择可执行文件,请使用IsWin64function

[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尽管我对任务有一个单独的问题,但是由于某种原因“桌面”没有刷新。但是以上工作。使用新系统失败。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Inno Setup 32位和64位dll安装

在Inno Setup中使用rundll32.exe的32位和64位版本

在Inno Setup安装结束时编写32/64位特定的注册表项

在Inno Setup中写入32/64位特定的注册表项

Inno Setup以32位模式安装到SysWOW64

即使指定了ArchitecturesInstallIn64BitMode,Inno Setup也将以32位启动

Inno Setup:保留现有的32位安装路径进行升级,使用64位安装路径进行新安装

Inno Setup - 拒绝注册表项的 ACL

在Inno Setup中使用Define和Constant

Inno Setup始终以Pascal脚本代码以32位模式启动PowerShell

在Inno Setup的[Code]部分中,可以使用64位DLL吗?

Inno Setup 忽略注册表重定向?

如何在Inno Setup中将LanguageID写入注册表?

Inno Setup:如何在“注册”部分操作进度栏?

Inno Setup:仅在需要时创建卸载注册表项

Inno Setup [注册表]-使用函数返回值

Inno Setup-防止同时执行多次安装程序

Inno Setup tmp被阻止

Inno Setup [设置] 64bit有条件

Inno Setup和Check中的两个条件

inno setup 在特定位置浏览和提取 zip 文件

Inno Setup:如何使用单选按钮和表单创建页面

Inno Setup“外部”子句是否负责加载和上传?

Inno Setup中的IsAdmin和IsAdminInstallMode有什么区别?

快速启动栏和Inno Setup v6

带有参数和屏幕截图的Inno Setup页面列表

Inno Setup更改Small Wizard图像的位置和大小

Inno Setup:修改特定错误消息的图标和标题

Inno Setup以Ansi和Unicode编码读取文件