1

我需要编写一个能够以分区大小仅为 1 MB 的方式格式化 USB 记忆棒的应用程序。

我们正在将 4 个演出 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命令返回的磁盘号。

4

1 回答 1

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
于 2013-10-28T10:09:54.150 回答