ssbu_lokrez/setup_noadmin.py

84 lines
2.4 KiB
Python

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