I have some shared assemblies/projects that are used within Winforms apps, windows services and now Azure worker roles.
Is there any way that I can detect at runtime if I am running in an Azure role.
I have found how you can detect if running Azure emulator or not:
Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.IsEmulated
But this does not do what I want. I would also prefer not to have to add references to any of the Azure assemblies in my shared assemblies.
Ideally I would like something similar to what I use to detect if running as a console vs a service:
System.Environment.UserInteractive
Is there anything that gives me this logic?
There are two types of Azure Cloud Services roles. The only difference between the two is how your role is hosted on the VMs: Web role: Automatically deploys and hosts your app through IIS. Worker role: Does not use IIS, and runs your app standalone.
Worker Role is any role in Azure that runs applications and services level tasks, which generally do not require IIS. In Worker Roles, IIS is not installed by default.
For anyone interested, thought I would sharehow I implemented, thanks to @Sandrino Di Mattia's answer:
You can check for the presence of the RoleRoot environment variable (for Cloud Services at least):
Note that this does NOT cater for a Winforms App as I only actually required it in the end for Services - i.e. detecting between service running as
This is an outline:
public static class ServiceRunner
{
private static bool IsAzureWorker
{
get { return !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("RoleRoot")); }
}
public static void Run(string[] args)
{
if (IsAzureWorker)
{
//Running as Azure Worker
}
else if (Environment.UserInteractive) //note, this is true for Azure emulator too
{
//Running as Console App
}
else
{
//Running as Windows Service
}
}
}
You can check for the presence of the RoleRoot environment variable (for Cloud Services at least):
Or, why not simply add a setting to your config (AppSettings or Service Configuration):
<appSettings>
...
<add key="AppEnvironment" value="Azure.CloudService|Azure.Website" />
</appSettings>
Then you can simply check if the setting exists with a specific value to see where you're running. This also means that during your (automated) build or deploy process you'll need to include this setting (this is possible with XDT for example).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With