import distutils, distutils.util import msilib import pathlib import lokrez, lokrez.version # ----------------------------------------------------------------------------- arch = distutils.util.get_platform().split("-")[-1] msi_filepath = pathlib.Path( "dist", "{}-{}-{}.msi" \ .format( lokrez.version.NAME, lokrez.version.__version__.replace("dev", "1337"), arch, ), ) # ----------------------------------------------------------------------------- # 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