Deploying Coro on Windows devices
This guide describes the process for deploying the Coro Agent to Windows devices.
Prerequisites and system requirements
Before you begin, make sure your Windows device meets the following prerequisites:
- Coro Security Platform utilizes a Bitdefender Software Development Kit (SDK). To avoid conflicts that may interfere with the installation of the Coro Agent, Bitdefender and any other antivirus software based on Bitdefender must be uninstalled prior to installing the Coro Agent.
- Windows devices must meet the minimum specifications .
- You must have administrative permissions to install applications on your Windows device.
Deployment options
Install the Coro Agent through one of the processes described below:
- Self-install on single devices : An admin user provides specific users with an installer link via email. Users select the link and follow the on-screen instructions to install the software on their devices. This method also applies to upgrading existing Agent versions (for version 1.5 and later).
-
Mass deployment
: An admin user downloads the Agent installer package and deploys it across all devices using a mass deployment tool.
Coro provides a number of articles covering mass deployment scenarios. To learn more:
note
For details on upgrading the Agent software, see Upgrading the agent.
Downloading and installing the Agent
Admin users with sufficient permissions download the Agent from the Agent Deployment tab on the Control Panel > Devices page:
The Channel column on the Coro Agent deployment list categorizes each available version of the Agent based on its current stage within the Agent release life cycle as follows:
Release Stage | Description |
---|---|
Beta | The initial development and promotion phase of the Agent. |
Release Candidate | Quality assurance testing starts, followed by the initial internal deployment of the Agent. |
Gradual Rollout | Incremental update rollout starts for the stable Agent. |
General Availability | The incremental rollout concludes, and the Agent is fully released to all Coro protected users. |
The All channels option allows admin users to select which release channels are allowed in the workspace:
The following options are available:
- Stable release channels : Only Gradual Rollout and General Availability release channels are allowed in the workspace.
- All release channels : All release channels are allowed in the workspace.
To download and install (or upgrade) the Coro Agent:
- Sign into the Coro console .
-
Select
Control Panel
:
- Select Devices > Agent Deployment .
-
Scroll to the
Windows
section:
-
Select
ACTIONS
:
Choose from the following actions:
-
Obtain a download link URL for the Agent installer:
- Select Copy link .
-
A
Copy Download Link
dialog is displayed, which contains a URL link to the Agent installation file:
-
Select
COPY
.
The download link is copied to your clipboard.
- Paste the link into a web browser and follow the instructions to install.
note
Admin users can distribute this link to endpoint device users for direct installation of the Agent. Additionally, they can use the same link for mass deployment through appropriate tools.
-
Download the Agent installer file:
-
Select
Download
.
The Agent installation file is downloaded to your local device.
warning
Do not rename the downloaded Agent installation file.
- After the download is complete, open the installation file and follow the instructions to install.
-
Select
Download
.
After completing the installation, the Agent may download additional updates:
-
Obtain a download link URL for the Agent installer:
-
After the installation and update process completes, open the Agent from the Windows system tray:
Coro is now the primary antivirus (AV) software for the device and is listed as an authorized Windows Security Center (WSC) provider in the Virus & threat protection section of the Windows Security component:
Important
To register Coro as an authorized WSC provider, your device must have:
- Coro Agent v3.2 (beta 2.5.65.1) or later installed.
- Windows 10 or later installed.
note
After the installation is complete, ensure you disable any firewall rules that may interfere with Coro Agent connectivity.
Known issues
-
The Coro Agent might not appear immediately in Windows Security Center (WSC) after deployment.
To verify the WSC registration of the Coro Agent:
-
Run the following PowerShell command:
Get-WmiObject -Namespace "root\SecurityCenter2" -Class "AntiVirusProduct"
-
Locate
displayName: Coro Endpoint Protection
:
The Coro Agent is confirmed as an authorized WSC provider.
-
Run the following PowerShell command:
See also:
Configuring endpoint monitoring (Optional)
In addition to its basic functions, Coro provides specific endpoint monitoring capabilities that you can enable or disable.
To configure your endpoint monitoring settings, log in to your Coro console and select Control Panel > Devices > Settings. To learn more, see Protection Settings.
These settings apply to all devices in the workspace.
Using the Coro deployment script
Coro also provides the following PowerShell deploy script to enable organizations to install the Coro Agent to their Windows devices either individually or through Remote Monitoring and Management (RMM) tools:
Expand for more details
########################
# IMPORTANT #
# This script requires elevated privileges (Run PowerShell as Admin) to run.
# If you are deploying it via GPO or any other RMM, they will already run it in elevated mode, unless specifically configured otherwise.
# However, if you run it locally as a user, you must make sure your PowerShell instance is elevated (Run PowerShell as Admin), otherwise the script will fail.
# This script can be used both locally and with GPO or any other RMM that support PowerShell. However, some specific RMMs only support limited PowerShell commands, so this script might not work on these. In this case, please contact Coro support for help.
########################
#Add the Coro installation URL below (in between quotes ""). You can obtain the URL from your Coro Workspace (go to Control Panel -> Devices. Scroll down
#to the latest Windows version, select the Actions button, then select Copy URL. From the Copy Invite Link dialog, select Copy.) Finally, paste the URL below.
$url = "Add the Coro installation URL obtained from Coro Workspace here. Do not delete the quotes"
#The URL above contains a string named CoroInstaller_XXXXX-XXXXX-XXXXX-XXXXX-XXXXX.msi (where X represents random numbers). Paste this string below (in between quotes "").
$newFilename = "Add the Coro msi package from the URL here. For example, CoroInstaller_1b16c978-cd39-49bf-8809-7b4e87227e4e.msi. Do not delete the quotes"
###########################
# FOR SPECIFIC CASES ONLY #
#Set the variable below to $false if you want the script to bypass Coro installation check.
#This might be useful in some specific cases when it is required to reinstall Coro over the corrupted version.
#However, please note that this method not work in all cases. In such cases Coro needs to be uninstalled first and then reinstalled.
$checkCoroInstall = $true #Use only when asked to do so by Support: set this variable to $false to instruct the script bypass Coro installation check.
###########################################################
##### NO NEED TO AMEND ANYTHING ELSE BELOW THIS LINE ######
###########################################################
#Checking for elevated permissions
$isElevated = [Security.Principal.WindowsPrincipal]::new([Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
$isUserContext = -not ([Environment]::UserInteractive -and $isElevated)
if (-not $isElevated -and $isUserContext) {
Write-Host ""
Write-Host "This script is not running in elevated mode. Please run Powershell as Administrator and execute this script." -ForegroundColor Cyan
Write-Host "The script will now terminate as it cannot run without elevated permissions." -ForegroundColor Cyan
Start-Sleep -Seconds 7
exit 1
} else {
Write-Host "This instance is elevated, proceeding to the next step" -ForegroundColor Green
Write-Host ""
}
#Display OS version
try {
Write-Host ""
Write-Host ""
$operatingSystem = Get-CimInstance -ClassName Win32_OperatingSystem
$osVersion = $operatingSystem.Version
$osEdition = $operatingSystem.Caption
$osArchitecture = $operatingSystem.OSArchitecture
$OSVersion = "$osEdition $osArchitecture $osVersion"
Write-Host "### $OSVersion ###"
Write-Host ""
} catch {
}
#Set variables
Write-Host "Configuring variables"
$logFilePath = "C:\Windows\Temp\CoroInstallerlog.txt"
$msiFilePath = "C:\Windows\Temp\$newFilename"
$folder = "C:\Program Files\Coro Cyber Security Ltd\Coro"
$file1 = "C:\Program Files\Coro Cyber Security Ltd\Coro\coronet-agent.exe" #CoroAgent1SRV
$file2 = "C:\Program Files\Coro Cyber Security Ltd\Coro\CsAgent\csagent.exe" #CoroAgent2SRV
$file3 = "C:\Program Files\Coro Cyber Security Ltd\Coro\user\Coro.exe" #Coro UI
$file4 = "C:\Program Files\Coro Cyber Security Ltd\Coro\coro-agent-s.exe" #CoroAgent3SRV
$file5 = "C:\Program Files\Coro Cyber Security Ltd\Coro\coro-agent-w.exe" #CoroAgent5SRV
Write-Host "Done!" -ForegroundColor Green
#Check if Coro is installed
if ($checkCoroInstall -ne $false) {
Write-Host ""
Write-Host "Checking if Coro is already installed"
$installed = $false
$present1 = $false
$present2 = $false
$present3 = $false
$present4 = $false
$present5 = $false
if (Test-Path -Path $folder -PathType Container) {
$folderPresent = $true
Write-Host ""
Write-Host "$folder folder is detected" -ForegroundColor Yellow
Write-Host "The script will check further" -ForegroundColor Yellow
} else {
$folderPresent = $false
Write-Host "Done! Coro is not installed, the script will carry on" -ForegroundColor Green
}
if ($folderPresent -ne $false) {
if (Test-Path -Path $file1 -PathType Leaf) { $present1 = $true }
if (Test-Path -Path $file2 -PathType Leaf) { $present2 = $true }
if (Test-Path -Path $file3 -PathType Leaf) { $present3 = $true }
if (Test-Path -Path $file4 -PathType Leaf) { $present4 = $true }
if (Test-Path -Path $file5 -PathType Leaf) { $present5 = $true }
if ($present1 -and $present2 -and $present3 -and $present4 -and $present5) {
$installed = $true
Write-Host""
Write-Host "Coro is already installed. The script will terminate now" -ForegroundColor Cyan
Start-Sleep -Seconds 7
exit 1
} elseif ($present1 -or $present2 -or $present3 -or $present4 -or $present5) {
$installed = $false
Write-Host""
Write-Host "Coro is installed, but the following critical file(s) is/are missing:" -ForegroundColor Yellow
Write-Host ""
if (!$present1) { Write-Host " - $file1 (CoroAgent1SRV)" -ForegroundColor Yellow}
if (!$present2) { Write-Host " - $file2 (CoroAgent2SRV)" -ForegroundColor Yellow}
if (!$present3) { Write-Host " - $file3 (CoroUI service)" -ForegroundColor Yellow}
if (!$present4) { Write-Host " - $file4 (CoroAgent3SRV)" -ForegroundColor Yellow}
if (!$present5) { Write-Host " - $file5 (CoroAgent5SRV)" -ForegroundColor Yellow}
Write-Host ""
Write-Host "The script will still attempt to install Coro" -ForegroundColor Green
Write-Host "If the installation fails, please uninstall Coro and retry" -ForegroundColor Green
} else {
$installed = $false
Write-Host "Done! Coro is not installed, the script will carry on" -ForegroundColor Green
}
}
} else {
$installed = $false
}
if ($installed -ne $true) {
#Download Coro installer
Write-Host ""
Write-Host "Downloading Coro installer. This might take some time, depending on download speed"
$webClient = New-Object System.Net.WebClient
try {
$webClient.DownloadFile($url, $msiFilePath)
Write-Host "Done! The installer is placed in C:\Windows\Temp" -ForegroundColor Green
} catch {
$errorMessage = $_.Exception.Message
if ($errorMessage -like "*Could not find file*") {
Write-Host ""
Write-Host "Download error." -ForegroundColor Cyan
Write-Host "Make sure Coro download URL and MSI file name are properly entered in `$url and `$newFilename variables in the script." -ForegroundColor Cyan
Write-Host "Retry the script after checking." -ForegroundColor Cyan
Write-Host ""
Write-Host "If the error persists, please contact Support and provide a screenshot of this message." -ForegroundColor Cyan
} elseif ($errorMessage -like "*The path is not of a legal form*") {
Write-Host ""
Write-Host "Download error. Error code: The path is not of a legal form." -ForegroundColor Cyan
Write-Host ""
Write-Host "Make sure the `$newFilename and `$url variables are not empty" -ForegroundColor Cyan
Write-Host "Retry the script after checking." -ForegroundColor Cyan
Write-Host ""
Write-Host "If the error persists, please contact Support and provide a screenshot of this message." -ForegroundColor Cyan
} elseif ($errorMessage -like "*Value cannot be null*") {
Write-Host ""
Write-Host "Download error. Error code: Value cannot be null. Parameter name: address." -ForegroundColor Cyan
Write-Host ""
Write-Host "Make sure the `$url variable is not renamed in the script." -ForegroundColor Cyan
Write-Host "Retry the script after checking." -ForegroundColor Cyan
Write-Host ""
Write-Host "If the error persists, please contact Support and provide a screenshot of this message." -ForegroundColor Cyan
} elseif ($errorMessage -like "*An exception occurred during a WebClient request*") {
Write-Host ""
Write-Host "Download error. Error code: An exception occurred during a WebClient request." -ForegroundColor Cyan
Write-Host ""
Write-Host "Make sure the `$newFilename variable is not renamed in the script and that it contains the correct name of Coro MSI file." -ForegroundColor Cyan
Write-Host "Retry the script after checking." -ForegroundColor Cyan
Write-Host ""
Write-Host "If the error persists, please contact Support and provide a screenshot of this message." -ForegroundColor Cyan
} else {
Write-Host ""
Write-Host "Error when downloading. Error message: $errorMessage" -ForegroundColor Cyan
Write-Host ""
Write-Host "Please contact Support and provide a screenshot of the error" -ForegroundColor Cyan
}
Start-Sleep -Seconds 10
exit 1
}
$webClient.Dispose()
#Install the downloaded file
try {
Write-Host ""
Write-Host "Installing Coro"
$coroInstall = Start-Process msiexec.exe -PassThru -Wait -ArgumentList "/i `"$msiFilePath`" /qn /L*V `"$logFilePath`""
$exitCode = $coroInstall.ExitCode
if ($exitCode -eq 0) {
Write-Host "Done! It is recommended to reboot your machine to finalise the install" -ForegroundColor Green
Start-Sleep -Seconds 1
$success = $true
} elseif ($exitCode -eq 1619) {
Write-Host "Installation failed because of value of `$msiFilePath variable" -ForegroundColor Cyan
Write-Host ""
Write-Host "Please check the `$msiFilePath variable in the script" -ForegroundColor Cyan
Write-Host "If the variable is correct, then this is something else" -ForegroundColor Cyan
Write-Host ""
Write-Host "Error code: $exitCode" -ForegroundColor Cyan
Write-Host "Please contact Support and send $logFilePath log file along with a screenshot of this output" -ForegroundColor Cyan
Remove-Item -Path $msiFilePath -Force -Confirm:$false
Start-Sleep -Seconds 10
exit 1
} elseif ($exitCode -eq 1612) {
Write-Host "Installation failed because the installation source is not available" -ForegroundColor Cyan
Write-Host ""
Write-Host "This often happens when Coro was already deployed via GPO/RMM in a wrong way (msi package renamed)" -ForegroundColor Cyan
Write-Host "So please check GPO/RMM to ensure it is not pushing any Coro install policy to this device" -ForegroundColor Cyan
Write-Host "After that, it is recommended to run the Uninstall script to delete all registry leftovers" -ForegroundColor Cyan
Write-Host "Re-run this script after that" -ForegroundColor Cyan
Write-Host ""
Write-Host "If the error persists after all this, then this is something else" -ForegroundColor Cyan
Write-Host ""
Write-Host "Error code: $exitCode" -ForegroundColor Cyan
Write-Host "Please contact Support and send $logFilePath log file along with a screenshot of this output" -ForegroundColor Cyan
Remove-Item -Path $msiFilePath -Force -Confirm:$false
Start-Sleep -Seconds 10
exit 1
} elseif ($exitCode -eq 1639) {
Write-Host "Installation failed because of incorrect argument(s) of ArgumentList argument" -ForegroundColor Cyan
Write-Host ""
Write-Host "Please check the script" -ForegroundColor Cyan
Write-Host ""
Write-Host "If the argument is correct, then this is something else"
Write-Host "Error code: $exitCode" -ForegroundColor Cyan
Write-Host "Please contact Support and send a screenshot of this output" -ForegroundColor Cyan
Remove-Item -Path $msiFilePath -Force -Confirm:$false
Start-Sleep -Seconds 10
exit 1
} elseif ($exitCode -eq 1603 -and $checkCoroInstall -ne $true) {
Write-Host "Installation failed" -ForegroundColor Cyan
Write-Host ""
Write-Host "Make sure the script is running in Elevated mode (Run PowerShell as Admin)" -ForegroundColor Cyan
Write-Host "Also, make sure Coro's registry hive is present in HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products" -ForegroundColor Cyan
Write-Host "If you just uninstalled Coro by any means, please reboot first and then run this script again" -ForegroundColor Cyan
Write-Host "If the issue still persists, then there is some other corruption. Try to run the Uninstall script and retry" -ForegroundColor Cyan
Write-Host ""
Write-Host "Error code: $exitCode" -ForegroundColor Cyan
Write-Host "Please contact Support and send a screenshot of this output" -ForegroundColor Cyan
Remove-Item -Path $msiFilePath -Force -Confirm:$false
Start-Sleep -Seconds 10
exit 1
} elseif ($exitCode -eq 1603) {
Write-Host "Installation failed" -ForegroundColor Cyan
Write-Host ""
Write-Host "Make sure the script is running in Elevated mode (Run PowerShell as Admin)" -ForegroundColor Cyan
Write-Host "If you just uninstalled Coro by any means, please reboot first and then run this script again" -ForegroundColor Cyan
Write-Host "If the issue still persists, then there is some other corruption. Try to run the Uninstall script and retry" -ForegroundColor Cyan
Write-Host ""
Write-Host "Error code: $exitCode" -ForegroundColor Cyan
Write-Host "Please contact Support and send a screenshot of this output" -ForegroundColor Cyan
Remove-Item -Path $msiFilePath -Force -Confirm:$false
Start-Sleep -Seconds 10
exit 1
} elseif ($exitCode -eq 1625) {
Write-Host "Installation failed" -ForegroundColor Cyan
Write-Host ""
Write-Host "This often occurs when Coro is already installed but corrupted" -ForegroundColor Cyan
Write-Host "Try to remove existing version of Coro via Control Panel or Uninstall script" -ForegroundColor Cyan
Write-Host "If the issue still persists, then there is something else" -ForegroundColor Cyan
Write-Host ""
Write-Host "Error code: $exitCode" -ForegroundColor Cyan
Write-Host "Please contact Support and send a screenshot of this output" -ForegroundColor Cyan
Remove-Item -Path $msiFilePath -Force -Confirm:$false
Start-Sleep -Seconds 10
exit 1
} else {
Write-Host "Installation failed, error code: $exitCode" -ForegroundColor Cyan
Write-Host ""
Write-Host "If Coro was ever installed on this machine, please first run the Uninstall script to clear all the leftovers and then retry."
Write-Host "Please contact Support and send $logFilePath log file along with a screenshot of this output" -ForegroundColor Cyan
Remove-Item -Path $msiFilePath -Force -Confirm:$false
Start-Sleep -Seconds 10
exit 1
}
} catch { }
#Delete installation files
if ($success -eq $true) {
Write-Host ""
Write-Host "Deleting installation and log files as they are no longer required"
if (Test-Path -Path $logFilePath) {
Remove-Item -Path $logFilePath -Force -Confirm:$false
}
if (Test-Path -Path $msiFilePath) {
Remove-Item -Path $msiFilePath -Force -Confirm:$false
}
Write-Host "Done!" -ForegroundColor Green
Write-Host ""
Write-Host "Coro has been installed successfully" -ForegroundColor Green
Start-Sleep -Seconds 5
} else { }
} else { }
In this script, replace the following variable markers with real values:
- $url : The download URL for the latest version of the Coro Agent installer for Windows, obtained from the Coro console. For details, see Deploying Coro on windows endpoints .
- $newFilename : The .msi installer filename, extracted from the download URL.
For example, using the download URL:
https://s3.amazonaws.com/client-repo.coro.net/beta/win/releases/2.0.412.1/CoroInstaller.msi?response-content-disposition=attachment%3B%20filename%3DCoroInstaller_123abc-456def-789abc.msi&AWSAccessKeyId=AKIA5XP6&Signature=y4V3Tq2dU9mE%3D&Expires=2005954595
This would result in the following script values:
Important
Make sure you do not delete the quotations when replacing the placeholder text.
note
If you manage multiple workspaces, you must create a copy of the standard Coro deployment script and repeat this process for each workspace.