2013-10-25 47 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