Hallo,
ich habe ein Problem mit einem größeren SW Paket. Im Paket prüfe ich ab, ob genügend Platz auf Laufwerk C:\ (1,6GB!) vorhanden ist und starte dann die Installation. Leider ist auf einigen älteren Rechnern nicht genügend Platz, aber es existiert ggfs. eine zweite Partition, auf der ich das Paket entpacken und von der ich aus installieren könnte. (Voraussetzung ist natürlich, dass auch dort genügend Platz ist.)
Ich will also eine ähnliche Funktion für mein Paket haben, wie es Microsoft für seine Pakete macht. MS Pakete prüfen, auf welcher Partition/Platte sie zum Entpacken den meisten Speicher frei haben...
Jetzt gibt es nur das Problem, wie erkenne ich, ob ich eine zweite Partition habe oder aber eine zweite interne Platte habe, die ich nutzen kann?
Mit den folgenden Zeilen werden alle Festplatten erkannt, aber leider auch extern angeschlossene USB Festplatten und diese will ich aus verschiedenen Gründen nicht nutzen (wie ich feststellen mußte nutzt MS auch die externen Platten... :wacko: )
$var = DriveGetDrive ( "FIXED" )
If NOT @error Then
MsgBox(4096,"", "Found " & $var[0] & " drives")
For $i = 1 to $var[0]
MsgBox(4096,"Drive " & $i, $var[$i])
Next
EndIf
Nun habe ich mir diesen (wirklich tollen) Thread (SB v X.0) und die zugehörigen Dateien angeschaut, aber leider nicht allzuviel verstanden.
Meine Versuche mit WMI zeigten auch immer die externe Festplatte: (hier das Beispiel aus der Scriptomatic, in dem, neben der internen Festplatte mit zwei Partitionen und der externen Festplatte, auch eine im PC Card Adapter steckende CompactFlash Disk als LogicalDisk erkannt wurde... )
[autoit]; Generated by AutoIt Scriptomatic
$file = FileOpen(@ScriptDir & '\LogicalDiskToPartition.log', 2)
If $file <> -1 Then
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"
$Output=""
$Output = $Output & "Computer: " & $strComputer & @CRLF
$Output = $Output & "==========================================" & @CRLF
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDiskToPartition", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
$Output = $Output & "Antecedent: " & $objItem.Antecedent & @CRLF
$Output = $Output & "Dependent: " & $objItem.Dependent & @CRLF
$Output = $Output & "EndingAddress: " & $objItem.EndingAddress & @CRLF
$Output = $Output & "StartingAddress: " & $objItem.StartingAddress & @CRLF
FileWriteLine($file, $Output)
FileWriteLine($file, '---------------------NewLine--------------------------------')
$Output=""
Next
Else
Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_LogicalDiskToPartition" )
Endif
EndIf
Ausgabe:
Computer: localhost
==========================================
Antecedent: \\MeinRechner\root\cimv2:Win32_DiskPartition.DeviceID="Disk #0, Partition #0"
Dependent: \\MeinRechner\root\cimv2:Win32_LogicalDisk.DeviceID="C:"
EndingAddress: 21476206079
StartingAddress: 32256
---------------------NewLine--------------------------------
Antecedent: \\MeinRechner\root\cimv2:Win32_DiskPartition.DeviceID="Disk #0, Partition #1"
Dependent: \\MeinRechner\root\cimv2:Win32_LogicalDisk.DeviceID="D:"
EndingAddress: 100027630079
StartingAddress: 21476206080
---------------------NewLine--------------------------------
Antecedent: \\MeinRechner\root\cimv2:Win32_DiskPartition.DeviceID="Disk #1, Partition #0"
Dependent: \\MeinRechner\root\cimv2:Win32_LogicalDisk.DeviceID="F:"
EndingAddress: 1023934463
StartingAddress: 32256
---------------------NewLine--------------------------------
Antecedent: \\MeinRechner\root\cimv2:Win32_DiskPartition.DeviceID="Disk #2, Partition #0"
Dependent: \\MeinRechner\root\cimv2:Win32_LogicalDisk.DeviceID="G:"
EndingAddress: 500105249279
StartingAddress: 32256
---------------------NewLine--------------------------------
Alles anzeigen
Gibt es eine Möglichkeit die externen USB Platten auszuschließen und nur das Laufwerk D:\ bei einer internen Festplatte zu nutzen?
mfg
Axel