Salve a tutti!
Sto cercando di realizzare un tool di ripristino di Windows in VB ma ho un problema: voglio aggiungere una progress bar che mi indica l'avanzamento del processo di ripristino, ovvero l'applicazione dell'immagine .WIM alla partizione C:\, tramite il tool ImageX ovviamente. Ho letto che l'unico modo per farlo è utilizzare le librerie WIMGAPI.dll, ma visto che le mie conoscenze in VB sono decisamente scarse non ho idea di come procedere. Ho trovato del codice su internet ma non ho idea di come impiegarlo. E' questo:
- Private Declare Auto Function WIMCreateFile _
- Lib "C:\Program Files\Windows AIK\Tools\x86\wimgapi.dll" ( _
- <MarshalAs(UnmanagedType.LPWStr)> ByVal WIMPath As String, _
- ByVal AccessType As Integer, ByVal Creation As UInt32, _
- ByVal Flags As UInt32, ByVal Compression As UInt32, _
- ByRef CreationResult As Integer) As IntPtr
- Private Declare Auto Function WIMCloseHandle _
- Lib "C:\Program Files\Windows AIK\Tools\x86\wimgapi.dll" ( _
- ByVal Handle As IntPtr) As Boolean
- Private Declare Auto Function WIMApplyImage _
- Lib "C:\Program Files\Windows AIK\Tools\x86\wimgapi.dll" ( _
- ByVal hWnd As IntPtr, _
- <MarshalAs(UnmanagedType.LPWStr)> ByVal DestinationPath As String, _
- ByVal ApplyFlags As UInt32) As Integer
- Private Declare Auto Function WIMLoadImage _
- Lib "C:\Program Files\Windows AIK\Tools\x86\wimgapi.dll" ( _
- ByVal hWnd As IntPtr, _
- ByVal ImageIndex As UInt32) As IntPtr
- Private Declare Auto Function WIMSetTemporaryPath _
- Lib "C:\Program Files\Windows AIK\Tools\x86\wimgapi.dll" ( _
- ByVal hWnd As IntPtr, _
- <MarshalAs(UnmanagedType.LPWStr)> ByVal TemporaryPath As String) As Integer
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim intResult As Integer
- Dim ptrWIMHandle As IntPtr
- Dim ptrImageHandle As IntPtr
- ptrWIMHandle = WIMCreateFile("C:\test.wim", 8, 3, 0, 0, Nothing)
- WIMSetTemporaryPath(ptrWIMHandle, "C:\Temp")
- ptrImageHandle = WIMLoadImage(ptrWIMHandle, 1)
- intResult = WIMApplyImage(ptrImageHandle, "C:\WIMTemp", 0)
- 'intResult = 0 and GetLastWin32Error() = 4390
- MsgBox("Just applied image. result = " & intResult & vbCrLf & "Last Win32 error = " & GetLastWin32Error())
- WIMCloseHandle(ptrImageHandle)
- WIMCloseHandle(ptrWIMHandle)
- End Sub
A quanto ho capito per applicare l'immagine non posso utilizzare direttamente la funzione WIMApplyImage ma prima devo ottenere il percorso dell'immagine con WIMCreateFile, poi devo settare una cartella temporanea e infine utilizzare WIMApplyImage per applicare l'immagine.
Il fatto è che buttando dentro il codice in un Form vuoto e aggiungendo un pulsante "Button1" , se lo premo non accade nulla. Ovviamente prima mi sono assicurato che "WIMGAPI.dll" si trovasse nella giusta directory e che il file "C:\test.wim" esistesse.
Potete aiutarmi?
NB: Attualmente sto realizzando il software con VB 2008 Express ma la versione finale sarà in VB6 per problemi di compatibilità con .NET Framework, quindi mi piacerebbe trovare una soluzione funzionante su entrambi gli IDE.
Grazie in anticipo!![]()