Qt Installer Framework - 防止在非空文件夹中安装
Qt Installer Framework - Prevent installation in non-empty folder
我使用 Qt Installer Framework。
我想知道如何防止在非空文件夹中安装?
此外,如何让卸载程序只删除它已安装的文件和文件夹,而不是其文件夹中的所有内容?
提前致谢
由于 Qt 文档,您可以访问脚本 API 中的 QDesktopServices,其中包含函数 findFiles(string path,string pattern)
,应该 return none 在你的例子中,路径是你的安装目标目录。
在 TargetDirectory 安装程序 Installer Page you have access to the set TargetDirectory via Installer Page 中,如果有一些编辑,可以连接到它。
我花了一些时间才想出以下解决方案,我不得不承认这不是我事先想要的方式。
首先你需要一个控制脚本,它需要在你的 config.xml
中设置。它被称为 controlScript.js
并且与您的 config.xml
.
位于同一目录中
config.xml
<?xml version="1.0" encoding="UTF-8"?>
<Installer>
<Name>Your application</Name>
<Version>1.0.0</Version>
<Title>Your application Installer</Title>
<Publisher>Your vendor</Publisher>
<StartMenuDir>Super App</StartMenuDir>
<TargetDir>@HomeDir@/InstallationDirectory</TargetDir>
<ControlScript>controlScript.js</ControlScript>
</Installer>
现在,我用于工作的唯一解决方案如下:
controlScript.js
function Controller()
{
console.log("Control script");
}
Controller.prototype.ComponentSelectionPageCallback = function() {
var widget = gui.currentPageWidget();
widget.title="Select empty directory!";
var targetDirWidget = gui.pageById(QInstaller.TargetDirectory);
var targetDir=targetDirWidget.TargetDirectoryLineEdit.text;
var files=QDesktopServices.findFiles(targetDir, "*.*");
if (files.length!=0) {
var result = QMessageBox.warning("quit.question", "You selected a non-empty directory!", targetDir,QMessageBox.Ok);
gui.clickButton(buttons.BackButton);
}
}
基本上,用户进入目标目录并按下返回按钮。如果目标目录是 non-empty,将显示一个消息框并按下组件选择中的返回按钮。
我想要的解决方案是事先停用 TargetDirectory 页面中的 NextButton,但我的所有尝试都是徒劳的。尽管下面的 NextButton 禁用应该有效,如此 answer.
所示
我使用 Qt Installer Framework。
我想知道如何防止在非空文件夹中安装?
此外,如何让卸载程序只删除它已安装的文件和文件夹,而不是其文件夹中的所有内容?
提前致谢
由于 Qt 文档,您可以访问脚本 API 中的 QDesktopServices,其中包含函数 findFiles(string path,string pattern)
,应该 return none 在你的例子中,路径是你的安装目标目录。
在 TargetDirectory 安装程序 Installer Page you have access to the set TargetDirectory via Installer Page 中,如果有一些编辑,可以连接到它。
我花了一些时间才想出以下解决方案,我不得不承认这不是我事先想要的方式。
首先你需要一个控制脚本,它需要在你的 config.xml
中设置。它被称为 controlScript.js
并且与您的 config.xml
.
config.xml
<?xml version="1.0" encoding="UTF-8"?>
<Installer>
<Name>Your application</Name>
<Version>1.0.0</Version>
<Title>Your application Installer</Title>
<Publisher>Your vendor</Publisher>
<StartMenuDir>Super App</StartMenuDir>
<TargetDir>@HomeDir@/InstallationDirectory</TargetDir>
<ControlScript>controlScript.js</ControlScript>
</Installer>
现在,我用于工作的唯一解决方案如下:
controlScript.js
function Controller()
{
console.log("Control script");
}
Controller.prototype.ComponentSelectionPageCallback = function() {
var widget = gui.currentPageWidget();
widget.title="Select empty directory!";
var targetDirWidget = gui.pageById(QInstaller.TargetDirectory);
var targetDir=targetDirWidget.TargetDirectoryLineEdit.text;
var files=QDesktopServices.findFiles(targetDir, "*.*");
if (files.length!=0) {
var result = QMessageBox.warning("quit.question", "You selected a non-empty directory!", targetDir,QMessageBox.Ok);
gui.clickButton(buttons.BackButton);
}
}
基本上,用户进入目标目录并按下返回按钮。如果目标目录是 non-empty,将显示一个消息框并按下组件选择中的返回按钮。
我想要的解决方案是事先停用 TargetDirectory 页面中的 NextButton,但我的所有尝试都是徒劳的。尽管下面的 NextButton 禁用应该有效,如此 answer.
所示