2011-10-04 10 views
7

Tengo algunos problemas con Azure Compute Emulator que no se reinicia correctamente. Para resolver esto, deseo agregar la llamada csrun /devfabric:stop a un paso previo a la compilación en la solución de Visual Studio.¿Cómo deduzco la ruta a Azure SDK csrun.exe cómodamente?

El problema es que csrun.exe se encuentra en C:\Program Files\Windows Azure SDK\v1.4\bin en mi máquina y esa ruta no está en la lista de directorios %PATH%. No quiero codificar esa ruta en mi solución.

¿Hay alguna manera de deducir el camino como usar alguna variable de entorno o algo similar?

+0

Lamentablemente, no he encontrado una manera ... –

Respuesta

6

Puede leer la ruta de Azure SDK desde el registro por versión. La última parte de la ruta es la versión ... Su código puede configurarse en una versión o puede iterar sobre las teclas v para encontrar la última. Recomendaría tener una constante para la versión que admite y mientras toma un nuevo SDK como prerrequisito.

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ ServiceHosting \ v1.4

Hay un "InstallPath" llave debajo de esos caminos.

0

Tuve el mismo problema y produje un script de PowerShell que establece una variable de entorno con la ruta a la carpeta bin SDK. Buscará automáticamente en el registro y encontrará la última versión instalada. También tiene una alternativa a la ubicación de registro alternativa, dependiendo de si su script se ejecuta en modo de 32 bits o de 64 bits. ¡Espero eso ayude!

Descargo de responsabilidad: Eliminé algunas cosas del script antes de publicarlo aquí y no lo probé después, pero creo que no es difícil depurarlo/ajustarlo a sus necesidades.

#the script attempts to perform the following: 
#1. look for the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\ServiceHosting" registry key 
#2. if the above key is present then read the child keys and retrieve the largest version number 
#3. from the largest version number key retrieve the "InstallPath" string value to determine the path of the latest Azure SDK installation 
#4. add an environment variable called "AzureSDKBin" (if not already added) with the path to the "bin" folder of the latest Azure SDK installation 

#define the name of the config variable 
$azureSDKPathVariable = 'AzureSDKBin' 
$azureRegistryKey = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\ServiceHosting' 
$azureAlternateRegistryKey = 'HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\ServiceHosting' #this is in case the PowerShell runs in 32bit mode on a 64bit machine 
$azureMatchedKey = '' 

#check if the environment variable was already defined 
if ([environment]::GetEnvironmentVariable($azureSDKPathVariable,"User").Length -eq 0) { 
    'Variable ' + $azureSDKPathVariable + ' is not defined, proceeding...' 

    #try reading the registry key 
    $keyExists = Get-Item -Path Registry::$azureRegistryKey -ErrorAction SilentlyContinue 

    $azureMatchedKey = $azureRegistryKey #make a note that we found this registry key 

    #stop if the key does not exist 
    if ($keyExists.Length -eq 0) { 
     'Could not find registry key in primary location: ' + $azureRegistryKey + ', attempting search in alternate location: ' + $azureAlternateRegistryKey 

     #search the alternate location 
     $keyExists = Get-Item -Path Registry::$azureAlternateRegistryKey -ErrorAction SilentlyContinue 

     $azureMatchedKey = $azureAlternateRegistryKey #make a note that we found this registry key 

     if ($keyExists.Length -eq 0) { 
      'Could not find registry key for determining Azure SDK installation: ' + $azureAlternateRegistryKey 
      'Script failed...' 
      exit 1 
     } 
    } 

    'Found Azure SDK registry key: ' + $azureMatchedKey 

    #logic for determining the install path of the latest Azure installation 
    #1. get all child keys of the matched key 
    #2. filter only keys that start with "v" (e.g. "v2.2", "v2.3") 
    #3. sort the results by the "PSChildName" property from which we removed the starting "v" (i.e. only the version number), descending so we get the latest on the first position 
    #4. only keep the first object 
    #5. read the value named "InstallPath" under this object 
    $installPath = (Get-ChildItem -Path Registry::$azureMatchedKey | Where-Object { $_.PSChildName.StartsWith("v") } | sort @{expression={ $_.PSChildName.TrimStart("v") }} -descending | Select-Object -first 1| Get-ItemProperty -name InstallPath).InstallPath 

    'Detected this Azure SDK installation path: "' + $installPath + '"' 

    #set the variable with the "bin" folder 
    [Environment]::SetEnvironmentVariable($azureSDKPathVariable, $installPath + 'bin\', "User") 

    'Assigned the value "' + [environment]::GetEnvironmentVariable($azureSDKPathVariable,"User") + '" to environment variable "' + $azureSDKPathVariable + '"' 
} 
else { 
    'Environment variable "' + $azureSDKPathVariable + '" is already defined and has a value of "' + [environment]::GetEnvironmentVariable($azureSDKPathVariable,"User") + '"' 
} 
Cuestiones relacionadas