From 37eccfeaf466ef171d1308e12022bf5afa34cff9 Mon Sep 17 00:00:00 2001 From: Lertsenem Date: Wed, 22 Jul 2020 20:44:48 +0200 Subject: [PATCH] Add script to fix msi generation The generated msi will be modified so it can be installed by any user. --- setup.py | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/setup.py b/setup.py index 6316708..06fcada 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,7 @@ import distutils, distutils.util +import msilib import os +import pathlib import setuptools import sys @@ -59,6 +61,73 @@ if os.name == "nt": ], ) + + # ------------------------------------------------------------------------- + # Modifications to allow for a non-admin-required msi + print("modifying final msi '{}' for standard user installation" \ + .format(msi_filepath)) + if not msi_filepath.exists(): + print("msi file does not exist") + else: + try: + db = msilib.OpenDatabase( + str(msi_filepath), + msilib.MSIDBOPEN_TRANSACT, + ) + + si = db.GetSummaryInformation(20) + cur_wc = si.GetProperty(msilib.PID_WORDCOUNT) + si.SetProperty( + msilib.PID_WORDCOUNT, + cur_wc | 0b1000, + ) + si.SetProperty( + msilib.PID_AUTHOR, + "{} - {}" \ + .format( + lokrez.version.ENTITY, + lokrez.version.AUTHOR, + ), + ) + si.Persist() + + # Install for the current user only + vi = db.OpenView( + "DELETE FROM `Property` WHERE `Property`.`Property` = " \ + "'ALLUSERS'", + ) + vi.Execute(None) + vi.Close() + + # Add the manufacturer name + vi = db.OpenView( + "UPDATE `Property` SET `Property`.`Value`='{} - {}' WHERE " \ + "`Property`.`Property` = 'Manufacturer'" \ + .format( + lokrez.version.ENTITY, + lokrez.version.AUTHOR, + ), + ) + vi.Execute(None) + vi.Close() + + # Update Path env variable for the user only + vi = db.OpenView( + "UPDATE `Environment` SET `Environment`.`Name`='=-Path' " \ + "WHERE `Environment`.`Environment` = 'E_PATH'", + ) + vi.Execute(None) + vi.Close() + + db.Commit() + db.Close() + + except Exception as e: + print("fail") + print(str(e)) + print(e.args) + raise + sys.exit(0) # Linux build