diff --git a/Galactic.iss.template b/Galactic.iss.template index 1afe0c2..698a706 100644 --- a/Galactic.iss.template +++ b/Galactic.iss.template @@ -61,8 +61,6 @@ CloseApplications=yes [UninstallRun] Filename: "cmd.exe"; Parameters: "/C taskkill /IM {#MyAppExec}.exe /F"; Flags: runhidden Filename: "cmd.exe"; Parameters: "/C taskkill /IM QtWebEngineProcess.exe /F"; Flags: runhidden -Filename: "cmd.exe"; Parameters: "/C taskkill /IM chrome.exe /F"; Flags: runhidden -Filename: "cmd.exe"; Parameters: "/C taskkill /IM chromedriver.exe /F"; Flags: runhidden Filename: "cmd.exe"; Parameters: "/C taskkill /IM selenium-manager.exe /F"; Flags: runhidden [Languages] diff --git a/Galactic.py b/Galactic.py index e3b36bf..34eea09 100644 --- a/Galactic.py +++ b/Galactic.py @@ -2088,8 +2088,8 @@ class WebServer: self.upload_dir = os.path.join(data, 'upload') self.browser_manager = BrowserManager( runner=runner, - driver=os.path.join(root, 'Chrome/chromedriver.exe'), - binary=os.path.join(root, 'Chrome/chrome.exe'), + driver=os.path.join(data, 'Chrome/chromedriver.exe'), + binary=os.path.join(data, 'Chrome/chrome.exe'), manager_data_file=os.path.join(data, 'manager.json'), browser_data_home=os.path.join(data, 'users'), browser_init_home=os.path.join(root, 'initialize'), @@ -2324,19 +2324,60 @@ class MainRunner: else: shutil.copy(src, dst) + @staticmethod + def _remove_directory(src): + if (os.path.isdir(src)) == 1: + shutil.rmtree(src) + + @staticmethod + def _rename_directory(src, dst): + if (os.path.isdir(src)) == 1: + os.rename(src, dst) + + @staticmethod + def _read_file_text(src): + return open(file=src, mode='r', encoding='utf-8').read() if os.path.exists(src) else '' + + def install_chrome(self): + chrome_install_source = os.path.join(self.app_root, 'Chrome') + chrome_install_source_version = os.path.join(chrome_install_source, 'chrome.version') + chrome_install_target = os.path.join(self.app_data, 'Chrome') + chrome_install_target_version = os.path.join(chrome_install_target, 'chrome.version') + chrome_install_target_newname = '%s.delete' % (chrome_install_target,) + if (os.path.exists(chrome_install_source)) != 1: + return None + if (self._read_file_text(chrome_install_source_version) == self._read_file_text(chrome_install_target_version)) == 1: + return None + if (os.path.exists(chrome_install_target)) == 1: + self._remove_directory(chrome_install_target_newname) + self._rename_directory(chrome_install_target, chrome_install_target_newname) + self._remove_directory(chrome_install_target_newname) + self._copy_files_and_directories(chrome_install_source, chrome_install_target) + return True + def run(self): os.path.exists(self.app_data) or os.makedirs(self.app_data) - if (os.environ.get('PYCHARM_HOSTED_ANY_TIME') is None) == 1: - log_dir = os.path.join(self.app_data, 'log') - os.path.exists(log_dir) or os.makedirs(log_dir) - stdout_redirector = OutputRedirector(sys.stdout, open(os.path.join(log_dir, '%s_stdout.log' % (time.strftime('%Y%m%d', time.localtime()),)), mode='a')) - stderr_redirector = OutputRedirector(sys.stderr, open(os.path.join(log_dir, '%s_stderr.log' % (time.strftime('%Y%m%d', time.localtime()),)), mode='a')) - sys.stderr = stderr_redirector - sys.stdout = stdout_redirector + log_dir = os.path.join(self.app_data, 'log') + os.path.exists(log_dir) or os.makedirs(log_dir) + stdout_redirector = OutputRedirector(sys.stdout, open(os.path.join(log_dir, '%s_stdout.log' % (time.strftime('%Y%m%d', time.localtime()),)), mode='a')) + stderr_redirector = OutputRedirector(sys.stderr, open(os.path.join(log_dir, '%s_stderr.log' % (time.strftime('%Y%m%d', time.localtime()),)), mode='a')) + sys.stderr = stderr_redirector + sys.stdout = stdout_redirector sys.path.append(os.path.join(os.path.dirname(__file__), 'Packages')) sys.path.append(os.path.join(os.path.dirname(__file__), 'site-packages.zip')) sys.path.append(os.path.join(self.app_data, 'Packages')) sys.path.append(os.path.join(self.app_data, 'site-packages.zip')) + try: + self.install_chrome() and print('Chrome is now installed.', file=sys.stderr) + except PermissionError: + _app = QApplication(sys.argv) + _msg = QMessageBox() + _msg.setIcon(QMessageBox.Warning) + _msg.setText('Chrome needs to be updated, please quit all browser users first.') + _msg.setWindowTitle('Warning') + _msg.setStandardButtons(QMessageBox.Cancel) + _msg.exec_() + _app.exit(1) self.web_server = WebServer(runner=self, root=self.app_root, data=self.app_data, default_plugins=self.plugin_list) self.web_server_thread = threading.Thread(target=self.web_server.run, kwargs={'host': self.web_server_host, 'port': self.web_server_port}) self.web_server_thread.daemon = True