Trzeba odnaleźć numer partycji i numer dysku dla znanej litery dyskowej. Bywa tak, że jeżeli na komputerze zainstalowanych jest kilka Windowsów, to każdy z nich twierdzi, że używa dysku C:, chociaż tak na prawdę oznaczenie literowe C: przyznaje różnym partycjom dyskowym. Poniżej fragment kodu ze strony http://bytes.com/topic/net/answers/509395-how-get-hard-disk-number-drive-letter , który pozwala wyświelić dane o partycjach i dyskach:
ManagementScope scope = new ManagementScope(@"\root\cimv2"); ObjectQuery query = new ObjectQuery("select * from Win32_DiskPartition"); ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query); ManagementObjectCollection drives = searcher.Get(); foreach (ManagementObject current in drives) { Console.WriteLine("device id = " + current["deviceid"]); ObjectQuery associators = new ObjectQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=\"" + current["deviceid"] + "\"} where assocclass=Win32_LogicalDiskToPartition"); searcher = new ManagementObjectSearcher(scope, associators); ManagementObjectCollection disks = searcher.Get(); foreach (ManagementObject disk in disks) { Console.WriteLine("\tdevice id = " + disk["deviceid"]); }
W moim przypadku należało znaleźć numer partycji dla dysku systemowego. Kiedy potrzeba sprawdzić na jakim dysku został zainstalowany windows można użyć jednej z następujących metod:
Environment.GetEnvironmentVariable("SystemRoot"); Environment.GetEnvironmentVariable("windir");
Pierwsza z nich zwaraca katalog główny dysku systemowego np c:\
Druga zwraca ścieżkę do katalogu z Windows np c:\Windows