rhcp011235

Untitled

Mar 2nd, 2026
7,211
0
Never
9
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.32 KB | None | 0 0
  1.  
  2.  
  3. import os
  4. import sys
  5. import subprocess
  6. import ctypes
  7. if '-m' in sys.argv:
  8. sys.exit(0)
  9. from PyQt5.QtWidgets import QApplication
  10. from PyQt5.QtCore import QSharedMemory
  11. from core.activator import Activator
  12. from utils.helpers import hide_console
  13. from utils.logger import setup_logger
  14. from monitors.security_monitor import SecurityMonitor
  15. from gui.dialogs import CustomAlertBox
  16. class SingleInstanceApp:
  17. def __init__(self, key):
  18. self.shared_memory = QSharedMemory(key)
  19. def is_running(self):
  20. if self.shared_memory.attach():
  21. return True
  22. else:
  23. if self.shared_memory.create(1):
  24. return False
  25. else:
  26. return True
  27. def release(self):
  28. if self.shared_memory.isAttached():
  29. self.shared_memory.detach()
  30. def app_dir():
  31. """Retorna el directorio donde está el ejecutable real (no el temp)"""
  32. if getattr(sys, 'frozen', False):
  33. return os.path.dirname(os.path.abspath(sys.executable))
  34. else:
  35. return os.path.dirname(os.path.abspath(__file__))
  36. BASE_DIR = app_dir()
  37. def run_updater_check(logger):
  38. updater = os.path.join(BASE_DIR, 'extra', 'updater.exe')
  39. if not os.path.exists(updater):
  40. logger.warning(f'Updater not found at: {updater}')
  41. return False
  42. else:
  43. try:
  44. result = subprocess.run([updater, '--check'], cwd=BASE_DIR, shell=False, timeout=30)
  45. return result.returncode == 10
  46. except Exception as e:
  47. logger.error(f'Error running updater: {e}')
  48. return False
  49. def main():
  50. logger = setup_logger()
  51. if run_updater_check(logger):
  52. logger.info('Update available, launching updater')
  53. updater_path = os.path.join(BASE_DIR, 'extra', 'updater.exe')
  54. try:
  55. subprocess.Popen([updater_path], cwd=BASE_DIR, shell=False, creationflags=subprocess.DETACHED_PROCESS | subprocess.CREATE_NEW_PROCESS_GROUP)
  56. except Exception as e:
  57. logger.error(f'Error launching updater: {e}')
  58. return 0
  59. else:
  60. if sys.platform == 'win32':
  61. try:
  62. myappid = 'com.bookra1n.a12.1.0'
  63. ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
  64. except Exception as e:
  65. logger.warning(f'Could not set App ID: {e}')
  66. logger.debug('Application starting...')
  67. SecurityMonitor.configure(logger)
  68. hide_console()
  69. app = QApplication(sys.argv)
  70. app.setApplicationName('Bookra1n A12 Bypass')
  71. single_instance = SingleInstanceApp('Bookra1n_A12_SingleInstance_Key_2024')
  72. if single_instance.is_running():
  73. logger.warning('Application is already running!')
  74. dialog = CustomAlertBox('Closing app', 'Bookra1n is already running.')
  75. dialog.exec_()
  76. return 0
  77. else:
  78. try:
  79. window = Activator(logger)
  80. window.show()
  81. exit_code = app.exec_()
  82. logger.debug(f'Application closing with exit code: {exit_code}')
  83. return exit_code
  84. except Exception as e:
  85. logger.error(f'Fatal error in application: {e}', exc_info=True)
  86. return 1
  87. if __name__ == '__main__':
  88. sys.exit(main())
Advertisement