Posts Tagged ‘Windows 8’

Windows Developer Preview, installazione da HDD USB e l’importanza del codice opensource.

venerdì, settembre 16th, 2011

E’ ormai “notizia consumata” il fatto che Microsoft in occasione della “Build Windows” Conference in quel di Anaheim, California, martedi sera abbia annunciato e reso disponibile la prima build pubblica di Windows 8 (per gli amici Windows Developer Preview).

Inutile ribadire il good mood che si è generato sul web intorno alla prossima release di Windows grazie anche all’ottima strategia di comunicazione che Microsoft sta adottando da qualche mese a questa parte basata anche su lavoro di Steven Sinofksy (che in questi giorni si è “trasformato” nel nuovo Steve Jobs Winking smile) e del suo mega team.

Era ormai un mese che seguivo gli sviluppi del nuovo OS grazie soprattutto al blog del Windows engineering team (http://blogs.msdn.com/b/b8/), ma nella spettacolare presentazione di martedi ho visto praticamente “materializzarsi” tutte le novità che erano state annunciate ed abbondantemente discusse nei commenti dei posts.

L’annuncio della disponibilità di una beta \ preview pubblica se lo aspettavano un po tutti, ergo mentre seguivo la keynotes del day 1 in streaming preparavo la partizione estesa sul hdd del mio laptop per poter “accogliere” il nuovo Windows. A fine keynotes avevo il download manager che puntava a http://msdn.microsoft.com/en-us/windows/apps/br229516.

Nella notte di mercoledi la blogosfera si è letteralmente riempita di guide, howto e posts tutti relativi all’installazione di WDP usando varie tecniche (VM su VPC, VM su VirtualBox, installazione nativa, etc). Personalmente, avendo “preparato” appositamente il mio laptop, a fine download, ero pronto per una bella installazione nativa che mi facesse godere a pieno del nuovo OS, ma l’ostacolo era dietro l’angolo: le dimensioni del img ISO WindowsDeveloperPreview-64bit-English-Developer (quella con I developer tool inclusi)di ben 4.8 GB.

E qui vengo all’oggetto di questo post: per usare quella ISO in un’installazione nativa c’è la necessità di avere o una pendrive da 8GB o un DVD9, ma a me mancavano entrambi e non potevo aspettare di procurarmeli … dovevo provare WDP, i nuovi tools di sviluppo (VS 2011 Express e Blend 5), la nuova API per le app metro style, subito Smile.

L’alternativa possibile per chi come me è sprovvisto di un pendrive “larga” e non si ritrova un DVD9 sottomano e quella di usare un HDD USB.

Nel mio caso l’HDD aveva i suoi 500GB tutti spalmati su un’unica partizione, per cui ho dovuto usare la live di gparted (gparted è un software che fa da partition manager e che gira su GNU/Linux http://gparted.sourceforge.net/) per poter “tirare fuori” dalla partizione principale una secondaria da 10 GB da usare come supporto per l’installazione di WDP.

Lo step successivo è stato quello di caricare il contenuto della ISO nella nuova partizione (necessariamente NTFS perchè ci sono file nel setup di WDP con peso sup. a 4GB) e renderla bootabile in modo da poter sfruttare il boot da device USB supportato dai BIOS moderni.

Mi era già capitato di installare Win7 da pendrive USB ed in quel caso avevo usato l’ottimo e super user friendly tool di Microsoft “Windows 7 USB/DVD download tool” (sempre per gli amici WUDT) (link) per cui ho deciso di riutilizzarlo.

Quindi .. Step 1: selezione della ISO,

image

Step 2: media type USB Device

image

STEP 3: … ecco  il secondo problema: il software non supportava HDD USB ma solo drive removibili (pen drive USB).

image

 

Leggendo la documentazione dal sito ufficiale,  pare che questa sia stata una scelta by design. Essendo, come dicevo super user friendly Smile, i suoi sviluppatori hanno deciso di evitare che qualche utente distratto potesse formattarsi l’HD sbagliando la selezione da quella dropdownlist.

 

Poi, però, mi sono ricordato di aver letto che di questo tool erano disponibili i sorgenti su codeplex. Una ricerca da codeplex.com .. ed istantaneamente “pesco” la pagina ufficiale:

 

http://wudt.codeplex.com/

 

Leggendo la documentazione “dev oriented” ho scoperto che in realtà I sorgenti di WUDT sono già inclusi nell’installer standard scacaricabile da MS Store, ed infatti in :

 

%userprofile%\AppData\Local\Apps\Windows 7 USB DVD Download Tool

 

ci ho trovato un bel wudtsource.zip pronto per essere “esplorato”.

 

La modifica è stata più che banale.

 

Aperta la solution in VS 9, ho subito notato quel “DriveService”:

 

image

 

… si tratta della classe astratta da cui poi ereditano DvdDriveService e UsbDriveService. Ovviamente, la mia modifica era da fare su quest ultimo.

 

Aperto il file UsbDriveService.cs, il “blocco by design” si nota subito :

 

 

        /// <summary>
        /// Initializes the list of drives to work with.
        /// </summary>
        /// <returns>The result of the initialization.</returns>
        public override DriveStatus Initialize()
        {
            return this.Initialize(DriveType.Removable);
        }


ed il conseguente codice di inizializzazione:

 

        /// <summary>
        /// Initializes the list of drives to work with.
        /// </summary>
        /// <param name="type">The type of drives to get.</param>
        /// <returns>The result of the initialization.</returns>
        protected DriveStatus Initialize(DriveType type)
        {
            this.drives = new List<DriveInfo>();
            var result = DriveStatus.Ready;

            DriveInfo[] devices = DriveInfo.GetDrives();

            foreach (var drive in devices)
            {
                if (drive.DriveType == type)
                {
                    this.drives.Add(drive);
                }
            }

            if (this.Drives.Count <= 0)
            {
                result = DriveStatus.NoDevices;
            }

            return result;
        }

 

Le possibilità, quindi, sono due:

 

1) modificare l’enumerable nel metodo in ovverride, scegliendo in base alle proprie esigenze, tra:

 

    // Summary:
    // Defines constants for drive types, including CDRom, Fixed, Network, NoRootDirectory,
    // Ram, Removable, and Unknown.
    [Serializable]
    [ComVisible(true)]
    public enum DriveType
    {
        // Summary:
        // The type of drive is unknown.
        Unknown = 0,
        //
        // Summary:
        // The drive does not have a root directory.
        NoRootDirectory = 1,
        //
        // Summary:
        // The drive is a removable storage device, such as a floppy disk drive or a
        // USB flash drive.
        Removable = 2,
        //
        // Summary:
        // The drive is a fixed disk.
        Fixed = 3,
        //
        // Summary:
        // The drive is a network drive.
        Network = 4,
        //
        // Summary:
        // The drive is an optical disc device, such as a CD or DVD-ROM.
        CDRom = 5,
        //
        // Summary:
        // The drive is a RAM disk.
        Ram = 6,
    }

 

2) eliminare il controllo dal metodo init protected:

 

            foreach (var drive in devices)
            {
                //if (drive.DriveType == type)
                //{
                    this.drives.Add(drive);
                //}
            }

 

L’effetto della 2° scelta è facilmente intuibile:

 

image

 

.. ho avuto quindi la possibilità di scegliere la mia partizione su HDD USB preparata ad-hoc per accogliere la ISO di installazione di WDP.

 

Il resto è procedura standard.

 

Ne approfitto, per chi volesse provare WDP usando un VHD, l’ottimo post di Scott Hanselman:

 

http://www.hanselman.com/blog/GuideToInstallingAndBootingWindows8DeveloperPreviewOffAVHDVirtualHardDisk.aspx

Tags: , , ,
Posted in .NET Framework, Microsoft, Windows | No Comments »