Fix script to change msi file
The msi modification failed because the msi file was still open when the script started modifying it. The simplest solution was to put all that in another separate setup_noadmin.py script.master
parent
37eccfeaf4
commit
fddeec93a7
69
setup.py
69
setup.py
|
@ -1,7 +1,5 @@
|
||||||
import distutils, distutils.util
|
import distutils, distutils.util
|
||||||
import msilib
|
|
||||||
import os
|
import os
|
||||||
import pathlib
|
|
||||||
import setuptools
|
import setuptools
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
@ -61,73 +59,6 @@ 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)
|
sys.exit(0)
|
||||||
|
|
||||||
# Linux build
|
# Linux build
|
||||||
|
|
|
@ -0,0 +1,83 @@
|
||||||
|
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
|
Loading…
Reference in New Issue