setup_noadmin.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import distutils, distutils.util
  2. import msilib
  3. import pathlib
  4. import lokrez, lokrez.version
  5. # -----------------------------------------------------------------------------
  6. arch = distutils.util.get_platform().split("-")[-1]
  7. msi_filepath = pathlib.Path(
  8. "dist",
  9. "{}-{}-{}.msi" \
  10. .format(
  11. lokrez.version.NAME,
  12. lokrez.version.__version__.replace("dev", "1337"),
  13. arch,
  14. ),
  15. )
  16. # -----------------------------------------------------------------------------
  17. # Modifications to allow for a non-admin-required msi
  18. print("modifying final msi '{}' for standard user installation" \
  19. .format(msi_filepath))
  20. if not msi_filepath.exists():
  21. print("msi file does not exist")
  22. else:
  23. try:
  24. db = msilib.OpenDatabase(
  25. str(msi_filepath),
  26. msilib.MSIDBOPEN_TRANSACT,
  27. )
  28. si = db.GetSummaryInformation(20)
  29. cur_wc = si.GetProperty(msilib.PID_WORDCOUNT)
  30. si.SetProperty(
  31. msilib.PID_WORDCOUNT,
  32. cur_wc | 0b1000,
  33. )
  34. si.SetProperty(
  35. msilib.PID_AUTHOR,
  36. "{} - {}" \
  37. .format(
  38. lokrez.version.ENTITY,
  39. lokrez.version.AUTHOR,
  40. ),
  41. )
  42. si.Persist()
  43. # Install for the current user only
  44. vi = db.OpenView(
  45. "DELETE FROM `Property` WHERE `Property`.`Property` = 'ALLUSERS'"
  46. )
  47. vi.Execute(None)
  48. vi.Close()
  49. # Add the manufacturer name
  50. vi = db.OpenView(
  51. "UPDATE `Property` SET `Property`.`Value`='{} - {}' WHERE " \
  52. "`Property`.`Property` = 'Manufacturer'" \
  53. .format(
  54. lokrez.version.ENTITY,
  55. lokrez.version.AUTHOR,
  56. ),
  57. )
  58. vi.Execute(None)
  59. vi.Close()
  60. # Update Path env variable for the user only
  61. vi = db.OpenView(
  62. "UPDATE `Environment` SET `Environment`.`Name`='=-Path' " \
  63. "WHERE `Environment`.`Environment` = 'E_PATH'",
  64. )
  65. vi.Execute(None)
  66. vi.Close()
  67. db.Commit()
  68. db.Close()
  69. except Exception as e:
  70. print("fail")
  71. print(str(e))
  72. print(e.args)
  73. raise