我需要编写一个能够以分区大小仅为1 MB的方式格式化USB记忆棒的应用程序。
我们正在改造USB加密狗中的4 gig USB记忆棒,上面有我们的tecnicians将随身携带的许可证文件。这允许他们访问我们软件的一些特殊设置。问题是我们的tecnicians也使用这个棒供私人使用(他们不应该),所以我们想通过将其大小减小到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
命令返回的磁盘号。
答案 0 :(得分:0)
我找到了解决方案!以下代码完全符合我的需要。所有我必须知道的是通讯。
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