之前有寫了一篇《在 Windows 命令提示字元安裝 Qt SDK》,大概紀錄了一下,在沒有圖形介面的環境下,使用腳本來安裝 Qt SDK 的方法。
腳本在當時是沒問題的,但是沒想到前幾天要用的時候,卻發現又無法使用了…
網路上找了一下資料,發現似乎是在過沒幾天、Qt 把安裝程式更新到 3.1.x 後,又改了一些東西造成的。(拜託顧一下相容性啊…)
找到的資料是 StackOverflow 上的《Bypassing “User Data Collection" screen》這個回應。根據他的說法,這次改版主要是加入了「User Data Collection」的畫面,另外在選擇元件的部分也多了分類的選擇。
也因此,腳本要針對這兩個變化,做出修改:
function Controller() {
installer.autoRejectMessageBoxes();
installer.installationFinished.connect(function() {
gui.clickButton(buttons.NextButton);
})
} Controller.prototype.WelcomePageCallback = function() {
gui.clickButton(buttons.NextButton, 3000); }Controller.prototype.DynamicTelemetryPluginFormCallback = function() {Controller.prototype.CredentialsPageCallback = function() {
gui.currentPageWidget().TelemetryPluginForm.statisticGroupBox.disableStatisticRadioButton.checked = true;
gui.clickButton(buttons.NextButton, 3000); }
gui.clickButton(buttons.NextButton); } Controller.prototype.IntroductionPageCallback = function() {
gui.clickButton(buttons.NextButton); } Controller.prototype.TargetDirectoryPageCallback = function() {
gui.currentPageWidget().TargetDirectoryLineEdit.setText("C:/Qt/");
gui.clickButton(buttons.NextButton); } Controller.prototype.ComponentSelectionPageCallback = function() {var page = gui.pageWidgetByObjectName("ComponentSelectionPage");
var archiveCheckBox = gui.findChild(page, "Archive");
var latestCheckBox = gui.findChild(page, "Latest releases");
var fetchButton = gui.findChild(page, "FetchCategoryButton");
archiveCheckBox.click();
latestCheckBox.click();
fetchButton.click();
var widget = gui.currentPageWidget();
widget.deselectAll();
widget.selectComponent("qt.qt5.5131.win64_msvc2017_64");
gui.clickButton(buttons.NextButton); } Controller.prototype.LicenseAgreementPageCallback = function() {
gui.currentPageWidget().AcceptLicenseRadioButton.setChecked(true);
gui.clickButton(buttons.NextButton); } Controller.prototype.StartMenuDirectoryPageCallback = function() {
gui.clickButton(buttons.NextButton); } Controller.prototype.ReadyForInstallationPageCallback = function() { gui.clickButton(buttons.NextButton); } Controller.prototype.FinishedPageCallback = function() {
var checkBoxForm = gui.currentPageWidget().LaunchQtCreatorCheckBoxForm
if (checkBoxForm && checkBoxForm.launchQtCreatorCheckBox) {
checkBoxForm.launchQtCreatorCheckBox.checked = false;
}
gui.clickButton(buttons.FinishButton); }
兩個紫色的區塊,就是新增的部分。
第一個 DynamicTelemetryPluginFormCallback 就是使用者資料蒐集的部分。
而 ComponentSelectionPageCallback 則就是去所有的分類都選起來了。
理論上,這樣的腳本現在應該是可以動的。
但是看來如果日後 Qt 又修改安裝程式的話,腳本又得跟著修改了…
[…] Qt 在這部份真的很討厭…本來以為弄好第一次後,以後就沒什麼問題了,但是後來 Qt […]
讚讚
[…] 本來以為這樣就沒事了?結果沒想到過了一個月,Qt 更新的安裝程式就多了一些選項,導致既有的安裝腳本無法運作了…這部分 Heresy 也有寫在《Qt 安裝腳本更新》裡。 […]
讚讚