[英]Reduce USB partition size using VB.net
我需要編寫一個能夠格式化USB記憶棒的應用程序,使分區的大小只有1 MB。
我們正在將USB加密狗中的4 gig USB記憶棒轉換為帶有技術人員將始終擁有的許可文件的USB加密狗。 這使他們可以訪問我們軟件的某些特殊設置。 問題是我們的技術人員也將此棍子用於私人用途(他們不應該),因此我們希望通過將其大小減小到1 MB來避免這種情況。 到目前為止,我已經通過稱為bootice的程序完成了此操作,但現在我們的秘書必須這樣做,而她對計算機的興趣不大,我們需要一個更簡單的解決方案。
因此,我需要在生成許可證密鑰的軟件中實施格式化。 因此單擊一下即可格式化驅動器並添加許可證。
是否可以使用標准尺寸以外的其他格式格式化驅動器?
我不需要剩余的4個木棍可用! 它們可以保持隱藏或未格式化。
---------------更新-----------
我能夠使用diskpart通過CMD重新對存儲棒進行分區。 現在的問題是我必須通過程序來做。 我必須執行的命令列表如下:
diskpart
list disk (REMEMBER DISK NUMBER FROM LIST)
select disk x (REPLACE X WITH DISK NUMBER)
list partition (REMEMBER PARTITION FROM LIST, USUALLY 1 IF ONLY ONE PARTITION IS THERE)
select partition x (REPLACE X WITH PARTITION NUMBER)
delete partition
create partition primary size=1
format
到現在為止還挺好。 我的問題是我需要找出我的USB磁盤具有的磁盤號。 我知道驅動器號,但不知道list disk
命令返回的磁盤號。
我找到了解決方案! 以下代碼正是我所需要的。 我所需要知道的只是驅動力。
Dim driveletter as string
Dim scope As ManagementScope
scope = New ManagementScope("\\localhost\root\cimv2")
scope.Connect()
Dim query As ObjectQuery
query = New ObjectQuery("SELECT * FROM Win32_PerfRawData_PerfDisk_PhysicalDisk")
Dim objOS As ManagementObjectSearcher
objOS = New ManagementObjectSearcher(scope, query)
Dim objMgmt As ManagementObject
Dim aryHardDiskOnSystem As New ArrayList
For Each objMgmt In objOS.Get
' aryHardDiskOnSystem.Add(objMgmt("name").ToString())
Debug.WriteLine(objMgmt("name").ToString())
If objMgmt("name").ToString().Contains(driveletter) Then
Dim drivenumber As Integer = objMgmt("name").ToString().Substring(0, 1)
Dim FILE_NAME As String = "part.scp"
If System.IO.File.Exists(FILE_NAME) = False Then
System.IO.File.Create(FILE_NAME).Dispose()
End If
Dim objWriter As New System.IO.StreamWriter(FILE_NAME, True)
objWriter.WriteLine("select disk " & drivenumber)
objWriter.WriteLine("select partition 1")
objWriter.WriteLine("delete partition")
objWriter.WriteLine("create partition primary size=1") 'size is in MB. i am reducing the partition size to 1 MB.
objWriter.WriteLine("format label=" & TextBox2.Text)
objWriter.Close()
Dim oProcess As New Process()
Dim oStartInfo As New ProcessStartInfo("diskpart", "/s part.scp")
oStartInfo.UseShellExecute = False
oStartInfo.RedirectStandardOutput = True
oProcess.StartInfo = oStartInfo
oProcess.Start()
oProcess.WaitForExit()
oProcess.Close()
File.Delete("part.scp")
End If
Next
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.