使用VB.net减少USB分区大小

时间:2013-10-25 12:39:42

标签: vb.net formatting vb.net-2010 partitioning usb-drive

我需要编写一个能够以分区大小仅为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命令返回的磁盘号。

1 个答案:

答案 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