Chrome will be installed in the data directory

This commit is contained in:
zhaoyafan 2025-02-22 15:51:56 +08:00
parent 9117bb8fcd
commit 76dc835e59
2 changed files with 50 additions and 11 deletions

View File

@ -61,8 +61,6 @@ CloseApplications=yes
[UninstallRun] [UninstallRun]
Filename: "cmd.exe"; Parameters: "/C taskkill /IM {#MyAppExec}.exe /F"; Flags: runhidden 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 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 Filename: "cmd.exe"; Parameters: "/C taskkill /IM selenium-manager.exe /F"; Flags: runhidden
[Languages] [Languages]

View File

@ -2088,8 +2088,8 @@ class WebServer:
self.upload_dir = os.path.join(data, 'upload') self.upload_dir = os.path.join(data, 'upload')
self.browser_manager = BrowserManager( self.browser_manager = BrowserManager(
runner=runner, runner=runner,
driver=os.path.join(root, 'Chrome/chromedriver.exe'), driver=os.path.join(data, 'Chrome/chromedriver.exe'),
binary=os.path.join(root, 'Chrome/chrome.exe'), binary=os.path.join(data, 'Chrome/chrome.exe'),
manager_data_file=os.path.join(data, 'manager.json'), manager_data_file=os.path.join(data, 'manager.json'),
browser_data_home=os.path.join(data, 'users'), browser_data_home=os.path.join(data, 'users'),
browser_init_home=os.path.join(root, 'initialize'), browser_init_home=os.path.join(root, 'initialize'),
@ -2324,19 +2324,60 @@ class MainRunner:
else: else:
shutil.copy(src, dst) 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): def run(self):
os.path.exists(self.app_data) or os.makedirs(self.app_data) 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')
log_dir = os.path.join(self.app_data, 'log') os.path.exists(log_dir) or os.makedirs(log_dir)
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'))
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'))
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.stderr = stderr_redirector sys.stdout = stdout_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__), 'Packages'))
sys.path.append(os.path.join(os.path.dirname(__file__), 'site-packages.zip')) 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, 'Packages'))
sys.path.append(os.path.join(self.app_data, 'site-packages.zip')) 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 = 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 = threading.Thread(target=self.web_server.run, kwargs={'host': self.web_server_host, 'port': self.web_server_port})
self.web_server_thread.daemon = True self.web_server_thread.daemon = True