Updated 10 may 2011, added some clarification
Startup tasks are the new way to run a script or file in Windows Azure, and we can run them under Elevated (Administrator) context. For this to work, add the assembly you want to add to the GAC to your project and set copy local to true. GacUtil is not installed in the Azure WebRole, so you’ll have to supply it as well.
Edit the .CSDEF file and add a Startup task with executionContext elevated:
<ServiceDefinition name=“MyProject“ xmlns=“http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition“>
<Task commandLine=“RegisterGAC.cmd“ executionContext=“elevated“ taskType=“simple“ />
Now add the RegisterGAC.cmd AND gacutil.exe from the platform SDK to your project, set the build action to none, and copy to output directory to Copy Always for both files!
In the RegisterGAC.cmd enter the following 2 lines:
gacutil /nologo /i .\Microsoft.IdentityModel.dll exit /b 0
Remember that the startup task runs from the /BIN folder. This file must be saved as Unicode without “byte code order”, choose advanced save options: UTF-8 without signature
There is also the possibility to set the taskType:
- Simple – needs to complete before the role continues
- Background – runs parallel with the role (startup)
- Foreground – runs parallel with the role, but needs to finish before the role can shutdown
Also remember that the right .Net 4.0 gacutil.exe is in this directory: C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools
Using Windows Update packages (MSU)
Another way to install the Windows Identity Framework (WIF) is to include the windows update package for WIF.
Download the correct WIF msu file for the Azure Role:
v1 = server 2008 = Windows6.0-KB974405-x64.msu
v2 = server 2008 R2 = Windows6.1-KB974405-x64.msu
And add it to your project and set “Copy to Output Directory Always” to “Copy Always”.
To run a MSU update package use the following startup task:
@echo off sc config wuauserv start=demand wusa.exe "%~dp0Windows6.1-KB974405-x64.msu" /quiet /norestart sc config wuauserv start=disabled exit /b 0