2013-10-25 28 views
1

我需要编写一个能够格式化USB存储棒的应用程序,使分区的大小只有1 MB。使用VB.net降低USB分区大小

我们正在转换USB加密狗上的4个USB闪存盘,上面有一个许可证文件,我们的技术人员将永远与他们在一起。这使他们能够访问我们软件的一些特殊设置。问题是我们的技术人员也使用这个棍子来私人使用(他们不应该),所以我们想通过将它缩小到1 MB来避免这种情况。到目前为止,我通过一个叫做bootice的程序完成了这项工作,但现在我们的秘书必须这样做,她并不是那么喜欢电脑,我们需要一个更简单的解决方案。

因此,我需要在生成许可证密钥的软件中实现格式化。所以只需一次单击它将格式化驱动器并添加许可证。

是否可以使用不同于标准尺寸的格式化驱动器?

我不需要剩余的4个演出棒可用!他们可以保持隐藏或无格式。

--------------- UPDATE -----------

我能使用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

我建议你使用它重新分区[FDISK](http://support.microsoft.com/kb/255867)*在Windows机器上的标准*。我相信你可以通过你的VB'process.start()'来确定参数。 – Steve

+0

@Steve FDISK不允许我更改USB驱动器上的分区大小......此外,它仅适用于较旧的系统。 – sharkyenergy

回答

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