Edit the Property Table of MSI Installers

 

Property Table contains the names and the values for all defined properties in the installation. Properties with Null value are not represented in the table.

 

Support for the following install samples:

MSI Driver Install Sample

MSI Driver Install Sample with Driver Package

WIX Install Sample

 

Visual Studio cannot edit the Property Table.

MSI installers use the Edit Property Table.js as PostBuildEvent

After finished the building process, the Visual Studio calls the Edit Property Table.js script with a rebuilt msi parameter:

[Project directory with full path]\Edit Property Table.js" "[Printer Driver name with full path].msi

 

Example for Edit Property Table.js:

// Edit Property Table.js <msi-file>

// Disable the Repair and Change feature on Programs and Features

 

// Opens a database read/write in transaction mode.

var msiOpenDatabaseModeTransact = 1;

 

// Required action to be performed on the database row. This action is one of those shown in the following table.

// Inserts a record.

var msiViewModifyInsert = 1

 

// Updates an existing record.

var msiViewModifyUpdate = 2

 

// Writes current data in the cursor to a table row.

var msiViewModifyAssign = 3

 

// Updates or deletes and inserts a record into a table.

var msiViewModifyReplace = 4

 

// Removes a row from the table.

var msiViewModifyDelete = 6

 

// The filespec value is first parameter of Edit Property Table.js

var filespec = WScript.Arguments(0);

 

// Create installer object

var installer = WScript.CreateObject("WindowsInstaller.Installer");

 

// Opens an existing database

var database = installer.OpenDatabase(filespec, msiOpenDatabaseModeTransact);

 

var sql

var view

 

try

{

// Disable the Repair feature in the Programs and Features

sql = "INSERT INTO `Property`(`Property`,`Value`) VALUES ('ARPNOREPAIR','1')";

view = database.OpenView(sql);

view.Execute();

view.Close();

            

// Disable the Modify feature in the Programs and Features

sql = "INSERT INTO `Property`(`Property`,`Value`) VALUES ('ARPNOMODIFY','1')";

view = database.OpenView(sql);

view.Execute();

view.Close();

 

database.Commit();

}

catch(e)

{

WScript.StdErr.WriteLine(e);

WScript.Quit(1);

}

 

For more information, please see the Windows Property Reference:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa370905(v=vs.85).aspx