Qt 安裝腳本更新


之前有寫了一篇《在 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() {
   gui.currentPageWidget().TelemetryPluginForm.statisticGroupBox.disableStatisticRadioButton.checked = true;
   gui.clickButton(buttons.NextButton, 3000); }
Controller.prototype.CredentialsPageCallback = function() {
   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 安裝腳本更新」的想法

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.