注册文件扩展示例
使用组件脚本在 Windows 上注册文件名扩展。
注册文件扩展 说明了如何在 Windows 上注册文件类型。我们使用 component.addOperation()
函数和 RegisterFileType
操作来注册一个随机生成的文件类型,以便使用记事本打开。
配置示例安装程序
在配置文件目录中的installer配置文件,config.xml指定了安装程序中使用的文本和默认值
<Name>
元素设置应用程序名称并将其添加到页面名称和简介文本中。<Version>
元素设置应用程序版本号。<Title>
元素设置安装程序名称并在标题栏中显示。<Publisher>
元素设置软件的发布者(例如,在 Windows 控制面板中显示的)。<StartMenuDir>
元素设置产品在 Windows 开始 菜单中的默认程序组名称。<TargetDir>
元素将默认目标目录位置设置为当前用户主目录中的IfwExamples
目录内(因为它使用预先存在的变量,
@HomeDir@,作为值的一部分)。有关更多信息,请参阅预定义变量。
<?xml version="1.0" encoding="UTF-8"?> <Installer> <Name>Register File Extension Example</Name> <Version>1.0.0</Version> <Title>Register File Extension Example</Title> <Publisher>Qt-Project</Publisher> <StartMenuDir>Qt IFW Examples</StartMenuDir> <TargetDir>@HomeDir@/IfwExamples/registerfileextension</TargetDir> </Installer>
创建示例包信息文件
在元文件目录中的install程序包信息文件 package.xml指定了可用于安装的组件
<DisplayName>
元素设置组件的易读名称。<Description>
元素设置组件的易读描述。<Version>
元素设置组件的版本号。<ReleaseDate>
元素设置此组件版本的发布日期。
<Default>
元素设置为true
,以在安装程序中预选组件。<Script>
元素指定执行操作的加载到操作中的JavaScript文件名称。<UserInterfaces>
元素指定用于安装程序的安装页面(.ui文件)的文件名。
<?xml version="1.0" encoding="UTF-8"?> <Package> <DisplayName>Register a file extension</DisplayName> <Description>Register a randomly generated file extension to open with notepad.exe</Description> <Version>1.0.0-1</Version> <ReleaseDate>2013-01-01</ReleaseDate> <Default>true</Default> <Script>installscript.qs</Script> <UserInterfaces> <UserInterface>registerfilecheckboxform.ui</UserInterface> <UserInterface>openfilecheckboxform.ui</UserInterface> </UserInterfaces> </Package>
注册文件扩展
在installscript.qs中,我们在所有组件都已加载后调用 Component()
函数以连接到 addRegisterFileCheckBox
信号
function Component() { component.loaded.connect(this, addRegisterFileCheckBox);
我们使用 addRegisterFileCheckBox()
函数在安装程序的最后一页显示用于注册生成的文件类型的复选框。在更新和卸载时隐藏此页面
addRegisterFileCheckBox = function() if (installer.isInstaller()) { if (installer.addWizardPageItem(component, "RegisterFileCheckBoxForm", QInstaller.TargetDirectory)) { component.userInterface("RegisterFileCheckBoxForm").RegisterFileCheckBox.text = component.userInterface("RegisterFileCheckBoxForm").RegisterFileCheckBox.text + component.unusualFileType; } } }
在最终用户选择最后一页上的 完成 时,我们连接到 openRegisteredFileIfChecked
信号
installer.finishButtonClicked.connect(this, openRegisteredFileIfChecked);
我们调用 openRegisteredFileIfChecked
函数以检查文件类型是否成功注册
openRegisteredFileIfChecked = function() { if (!component.installed) return; if (installer.value("os") == "win" && installer.isInstaller() && installer.status == QInstaller.Success) { var isOpenRegisteredFileChecked = component.userInterface("OpenFileCheckBoxForm").OpenRegisteredFileCheckBox.checked; if (isOpenRegisteredFileChecked) { QDesktopServices.openUrl("file:///" + component.fileWithRegisteredType); } } }
我们将 unusualFileType
变量绑定到 generateUnusualFileType()
函数,该函数随机生成指定长度的文件类型
component.unusualFileType = generateUnusualFileType(5) } generateUnusualFileType = function(length) { var randomString = ""; var possible = "abcdefghijklmnopqrstuvwxyz0123456789"; for (var i = 0; i < length; i++) randomString += possible.charAt(Math.floor(Math.random() * possible.length)); return randomString; }
我们使用 RegisterFileType
操作创建指定类型的文件,并指定打开文件的应用程序
component.createOperations(); if (component.userInterface("RegisterFileCheckBoxForm")) { var isRegisterFileChecked = component.userInterface("RegisterFileCheckBoxForm").RegisterFileCheckBox.checked; } if (installer.value("os") === "win") { var iconId = 0; var notepadPath = installer.environmentVariable("SystemRoot") + "\\notepad.exe"; component.addOperation("RegisterFileType", component.unusualFileType, notepadPath + " '%1'", "QInstaller Framework example file type", "text/plain", notepadPath + "," + iconId, "ProgId=QtProject.QtInstallerFramework." + component.unusualFileType); } component.fileWithRegisteredType = installer.value("TargetDir") + "/registeredfile." + component.unusualFileType component.addOperation("Move", "@TargetDir@/registeredfile", component.fileWithRegisteredType); }
生成示例安装程序
要创建示例安装程序,请切换到命令行中的示例源目录,并输入以下命令
- 在 Windows 上
..\..\bin\binarycreator.exe -c config\config.xml -p packages installer.exe
- 在 Linux 或 macOS 上
../../bin/binarycreator -c config/config.xml -p packages installer
这将创建当前目录的安装程序。
运行安装程序后,双击已安装文件,registeredfile.<扩展名>
,在记事本中打开它。
文件
- registerfileextension/config/config.xml
- registerfileextension/packages/org.qtproject.ifw.example.registerfileextension/meta/installscript.qs
- registerfileextension/packages/org.qtproject.ifw.example.registerfileextension/meta/openfilecheckboxform.ui
- registerfileextension/packages/org.qtproject.ifw.example.registerfileextension/meta/package.xml
- registerfileextension/packages/org.qtproject.ifw.example.registerfileextension/meta/registerfilecheckboxform.ui
- registerfileextension/registerfileextension.pro
©2021 The Qt Company Ltd. 本文档中的文档贡献是各自所有者的版权。提供的文档是根据自由软件基金会发布的 GNU 自由文档许可协议版本 1.3 的条款进行许可的。Qt 公司、Qt 及其各自标志是芬兰和/或其他国家的 Qt 公司的商标。所有其他商标均为各自所有者的财产。