DEV Community

cuongld2
cuongld2

Posted on • Edited on

Automatically install and uninstall app by powershell in Windows wrapper in Python code

Dear folks, sometimes you might run into the task where you need to automatically install something in Windows.

Recently, I needed to do that task. So today I'm gonna share with you how to do that in powershell wrapper by Python.

I.What is powershell:

You might want to checkout in wiki

Powershell is a shell tool available in windows (since Windows 8)

It has more functionality compared to the good old command in DOS

II.Real world problem:

We would need to check if the app is installed yet, if it is installed and it is the latest version -> skip. If it is installed but the version is not latest --> uninstall then install.

If the app is not installed yet, --> proceed to install the latest version.

1.Get the current running version of the app:

The sample app we're working on would be "Cốc Cốc" browser.

 def get_current_login_user(): import subprocess import re p1 = subprocess.Popen(["powershell.exe", "whoami"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) who_am_i = p1.communicate()[0] user_name = re.split(r'\\r', (re.split(r'.\\\\', str(who_am_i))[1]))[0] return user_name def get_coccoc_version_folder_name(): import subprocess import re p = subprocess.Popen(["powershell.exe", f"cd C:\\Users\\{current_user}\\AppData\\Local\\CocCoc\\Browser\\Application; ls"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) current_dir = str(p.communicate()[0]) coccoc_version = re.findall(r'\b\d+\.+\b\d+\.\b\d+\.+\d*', current_dir)[0] return coccoc_version 
Enter fullscreen mode Exit fullscreen mode

2.Get the latest version info stored in yaml file:

yaml_made_utils = YamlUtils() configuration_info = None configuration_path = '/resources/configurations.yaml' def get_configurations_info(): if configuration_info is None: return yaml_made_utils.read_data_from_file(os.getcwd() + configuration_path) else: return configuration_info class CocCocConfigs: COCCOC_DEV_VERSION = get_configurations_info()['coccoc_dev_version'] @staticmethod def update_coccoc_dev_version(coccoc_version): data = get_configurations_info() data['coccoc_dev_version'] = coccoc_version return yaml_made_utils.write_data_to_file(data, os.getcwd() + configuration_path) 
Enter fullscreen mode Exit fullscreen mode

3.Uninstall the app

 def uninstall_coccoc_silently(): import subprocess p = subprocess.Popen(["powershell.exe", f"cd C:\\Users\\{current_user}\\AppData\\Local\\CocCoc\\Browser\\Application" f"\\{get_coccoc_version_folder_name()}" f"\\Installer; .\\setup.exe --uninstall --force-uninstall"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) p.communicate() 
Enter fullscreen mode Exit fullscreen mode

4.Install the app

 def install_coccoc_silently(): import subprocess p = subprocess.Popen(["powershell.exe", f"cd C:\\coccoc-dev; .\\{coccoc_installer_name} /silent /install"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) p.communicate() 
Enter fullscreen mode Exit fullscreen mode

5.Main function to run would be like :

 def main(): if check_if_coccoc_is_installed(): coccoc_version = get_coccoc_version_folder_name() from configs.yaml_configs import CocCocConfigs if coccoc_version in CocCocConfigs.COCCOC_DEV_VERSION: pass else: uninstall_coccoc_silently() import time time.sleep(5) install_coccoc_silently() else: install_coccoc_silently() if __name__ == "__main__": main() 
Enter fullscreen mode Exit fullscreen mode

You can checkout the source code from here

Notes: If you feel this blog help you and want to show the appreciation, feel free to drop by :

This will help me to contributing more valued contents.

Happy coding!!!

Top comments (0)