Files
UnrealEngine/Engine/Source/ThirdParty/DotNetZip/Setup Runtime/PostProcessMsi.js
2025-05-18 13:04:45 +08:00

177 lines
6.3 KiB
JavaScript

// PostProcessMSi.js
//
// Post-process the generated MSI :
//
// - move things around on the installdir dialog, and on the progress
// dialog, to make the UI look better.
//
//
// Copyright (c) 2011 Dino Chiesa.
// All rights reserved.
//
// This code module is part of DotNetZip, a zipfile class library.
//
// ------------------------------------------------------------------
//
// This code, like all of DotNetZip, is licensed under the Microsoft
// Public License. See the file License.txt accompanying this source
// modeule for the license details. More info on:
// http://dotnetzip.codeplex.com
//
// Created: Thu, 14 Jul 2011 17:31
// Last saved: <2011-July-28 12:36:05>
//
// Constant values from Windows Installer
var msiOpenDatabaseMode = {
Transact : 1
};
var msiViewModify = {
Insert : 1,
Update : 2,
Assign : 3,
Replace : 4,
Delete : 6
};
if (WScript.Arguments.Length != 1){
WScript.StdErr.WriteLine(WScript.ScriptName + " file");
WScript.Quit(1);
}
var filespec = WScript.Arguments(0);
WScript.Echo(WScript.ScriptName + " " + filespec);
var installer = WScript.CreateObject("WindowsInstaller.Installer");
var database = installer.OpenDatabase(filespec, msiOpenDatabaseMode.Transact);
var sql;
var view;
var record;
try {
// var fileId = FindFileIdentifier(database, filename);
// if (!fileId){
// throw new Error ("Unable to find '" + filename + "' in File table");
// }
WScript.Echo("Updating the Control table...");
// // Move the checkbox on the exit dialog, so that it appears in the row of buttons.
// // We do this because the background on the checkbox is gray, unchangeably so.
// // but the bg for the row of buttons is gray, so it looks ok if moved there.
// sql = "SELECT `Dialog_`, `Control`, `Type`, `X`, `Y`, `Width`, `Height` FROM `Control` WHERE `Dialog_`='ExitDialog' AND `Control`='OptionalCheckBox'";
// view = database.OpenView(sql);
// view.Execute();
// record = view.Fetch();
// // index starts at 1
// record.IntegerData(4) = 14; // X
// record.IntegerData(5) = 243; // Y
// record.IntegerData(6) = 120; // Width
// record.IntegerData(7) = 16; // Height
// view.Modify(msiViewModify.Replace, record);
// view.Close();
// Insert a new checkbox into the InstallDirDlg.
// This one controls whether to associate zip files to DotNetZip.
// sql = "SELECT `Control` FROM `Control` WHERE `Control`='CheckboxAssoc'";
// view = database.OpenView(sql);
// view.Execute();
// record = view.Fetch();
// var controlExists = null;
// if (record != null) controlExists = record.StringData(1);
// if (record == null || controlExists != "CheckboxAssoc") {
//
// sql = "INSERT INTO `Control` (`Dialog_`, `Control`, `Type`, `X`, `Y`, " +
// "`Width`, `Height`, `Attributes`, `Property`, `Text`, `Control_Next`, `Help`) " +
// "VALUES ('InstallDirDlg', 'CheckboxAssoc', 'CheckBox', '20', '124', '184', '14', '3', "+
// "'WANT_ZIP_ASSOCIATIONS', 'Associate .zip files to DotNetZip', 'Next', '|')";
// view = database.OpenView(sql);
// view.Execute();
// view.Close();
//
// sql = "UPDATE `Control` SET `Control`.`Control_Next` = 'CheckboxAssoc' " +
// "WHERE `Control`.`Dialog_`='InstallDirDlg' AND `Control`.`Control`='ChangeFolder'";
// view = database.OpenView(sql);
// view.Execute();
// view.Close();
// }
// Tweak the existing controls on the InstallDirDlg: move them up a bit, shrink the label
sql = "UPDATE `Control` SET `Control`.`Y` = 76 " +
"WHERE `Control`.`Dialog_`='InstallDirDlg' AND `Control`.`Control`='Folder'";
view = database.OpenView(sql);
view.Execute();
view.Close();
sql = "UPDATE `Control` SET `Control`.`Y` = 96 " +
"WHERE `Control`.`Dialog_`='InstallDirDlg' AND `Control`.`Control`='ChangeFolder'";
view = database.OpenView(sql);
view.Execute();
view.Close();
sql = "UPDATE `Control` SET `Control`.`Height` = 16 " +
"WHERE `Control`.`Dialog_`='InstallDirDlg' AND `Control`.`Control`='FolderLabel'";
view = database.OpenView(sql);
view.Execute();
view.Close();
// Tweak the existing controls on the ProgressDlg: move the status
// text up a bit, and make it taller, because it was being clipped
// by its own height, and also by the proximity of the progress bar.
// These seem like basic fit-and-finish problems that Wix shouldn't have.
// WIX is an idiot.
sql = "UPDATE `Control` SET `Control`.`Y` = 96, `Control`.`Height` = 14 " +
"WHERE `Control`.`Dialog_`='ProgressDlg' AND `Control`.`Control`='StatusLabel'";
view = database.OpenView(sql);
view.Execute();
view.Close();
sql = "UPDATE `Control` SET `Control`.`Y` = 96, `Control`.`Height` = 14 " +
"WHERE `Control`.`Dialog_`='ProgressDlg' AND `Control`.`Control`='ActionText'";
view = database.OpenView(sql);
view.Execute();
view.Close();
sql = "UPDATE `Control` SET `Control`.`Y` = 58 " +
"WHERE `Control`.`Dialog_`='ProgressDlg' AND `Control`.`Control`='TextInstalling'";
view = database.OpenView(sql);
view.Execute();
view.Close();
sql = "UPDATE `Control` SET `Control`.`Y` = 58 " +
"WHERE `Control`.`Dialog_`='ProgressDlg' AND `Control`.`Control`='TextChanging'";
view = database.OpenView(sql);
view.Execute();
view.Close();
sql = "UPDATE `Control` SET `Control`.`Y` = 58 " +
"WHERE `Control`.`Dialog_`='ProgressDlg' AND `Control`.`Control`='TextRepairing'";
view = database.OpenView(sql);
view.Execute();
view.Close();
sql = "UPDATE `Control` SET `Control`.`Y` = 58 " +
"WHERE `Control`.`Dialog_`='ProgressDlg' AND `Control`.`Control`='TextRemoving'";
view = database.OpenView(sql);
view.Execute();
view.Close();
// if (checkboxChecked) {
// WScript.Echo("Updating the Property table...");
// // Set the default value of the CheckBox
// sql = "INSERT INTO `Property` (`Property`, `Value`) VALUES ('LAUNCHAPP', '1')";
// view = database.OpenView(sql);
// view.Execute();
// view.Close();
// }
// WScript.Echo("G");
database.Commit();
}
catch(e) {
WScript.StdErr.WriteLine(e);
WScript.Quit(1);
}