123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- 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
|