Automatically install and uninstall app by powershell in Windows wrapper in Python code
Tags: automation, installation, powershell, python
Published: 2020-01-09 11:28:09

---
title: Automatically install and uninstall app by powershell in Windows wrapper in Python code
published: true
description: 
tags: #automation #installation #powershell #python
---

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](https://en.wikipedia.org/wiki/PowerShell)

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.

```javascript

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

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

```javascript
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)


```

3.Uninstall the app

```javascript

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()

```

4.Install the app

```javascript

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()

```

5.Main function to run would be like :

```javascript

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()

```

You can checkout the source code from [here](https://github.com/cuongld2/download_latest_coccoc_dev_ftp)

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

[<img src="https://thepracticaldev.s3.amazonaws.com/i/cno42wb8aik6o9ek1f89.png">](https://www.buymeacoffee.com/dOaeSPv
)

This will help me to contributing more valued contents.


Happy coding!!!