Hardware Dev Center

Collapse the table of content
Expand the table of content
Espandi Riduci a icona

Creare apps per Windows PE

Windows PE (WinPE) viene concesso in licenza a fornitori di software indipendenti (ISV, Independent Software Vendor) e OEM (Original Equipment Manufacturers) per la creazione di distribuzioni personalizzate e utilità di ripristino. Questo argomento include linee guida per ISV e OEM per lo sviluppo di app di distribuzione e ripristino da eseguire in Windows PE.

noteNota
Windows PE non è un sistema operativo generico. Deve essere usato solo per scopi di distribuzione e ripristino. Non deve essere usato come thin client o come sistema operativo integrato. Per questi scopi sono disponibili altri prodotti Microsoft®, ad esempio Windows Embedded CE.

La maggior parte delle app di Windows PE è costituita da app shell a funzione fissa che forniscono la propria interfaccia utente grafica. Due esempi sono l'app Windows Setup e Windows Recovery Environment (Windows RE).

  • Se è accettabile visualizzare un prompt dei comandi, modifica Startnet.cmd. Questo è il modo più semplice per avviare automaticamente un'app. Vedi WinPE: montare e personalizzare.

  • Per fare in modo che l'app ignori la riga di comando e si avvii nell'interfaccia utente grafica, usa Winpeshl.exe, Wpeinit.exe, wpeutil.exe e wpeutil.dll.

Per impostazione predefinita, Winpeshl.exe è il primo processo eseguito all'avvio di Windows PE, come specificato da questo valore di tipo REG_SZ del Registro di sistema.

HKEY_LOCAL_MACHINE
   System
      Setup
         CmdLine

Winpeshl.exe cerca un file con nome Winpeshl.ini. Se il file non esiste, Winpeshl.exe avvia un processo Cmd.exe che esegue lo script Startnet.cmd. Se Winpeshl.ini esiste e contiene app da avviare, verranno eseguite le app invece di Cmd.exe.

Wpeinit.exe installa dispositivi Plug and Play (PnP), avviando lo stack di rete ed elaborando le impostazioni in Unattend.xml all'avvio di Windows PE. Per altre informazioni, vedi Wpeinit e Startnet.cmd: utilizzo degli script di avvio di WinPE.

Puoi avviare le funzionalità di rete in qualsiasi momento, permettendo l'esecuzione di Wpeinit.exe all'avvio di Windows PE oppure eseguendo il comando Opzioni della riga di comando di Wpeutil.

Le app shell personalizzate possono chiamare direttamente Wpeutil.dll con le funzioni LoadLibrary e GetProcAddress. Per informazioni correlate, vedi INFO: Alternative all'utilizzo di GetProcAddress () con LoadLibrary).

Ogni funzione esportata da Wpeutil.dll ha la stessa firma di funzione della Funzione WinMain, come illustrato in questo frammento di codice di esempio.

int InitializeNetworkingW(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
);

Questo codice di esempio mostra come inizializzare le funzionalità di rete.

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
typedef int (*WpeutilFunction)( 
HINSTANCE hInst, 
HINSTANCE hPrev, 
LPTSTR lpszCmdLine, 
int nCmdShow 
);
int __cdecl _tmain( int argc, TCHAR *argv[] )
{
    
HMODULE         hWpeutil          = NULL;
    
WpeutilFunction InitializeNetwork = NULL;
    
int             result            = 0;
    
TCHAR           szCmdLine[]       = _T("");
    
hWpeutil = LoadLibrary( _T("wpeutil") );
    
if( NULL == hWpeutil )
    
{
        _tprintf( _T("Unable to load wpeutil.dll \ n") );
        
return GetLastError();
}
    
InitializeNetwork = (WpeutilFunction)GetProcAddress( 
hWpeutil, 
"InitializeNetworkW" 
);
    
if( NULL == InitializeNetwork )
    
{
        
FreeLibrary( hWpeutil );
        
return GetLastError();
    
}
    
result = InitializeNetwork( NULL, NULL, szCmdLine, SW_SHOW );
    
if( ERROR_SUCCESS == result )
    
{
        _tprintf( _T("Network initialized. \ n") );
    
}
  
else
    
{
        _tprintf( _T("Initialize failed: 0x%08x"), result );
    
}
    
FreeLibrary( hWpeutil );

return result;}

Per un elenco completo dei valori esportati da Wpeutil.dll, vedi Opzioni della riga di comando di Wpeutil.

Alcune impostazioni di base del progetto Visual Studio possono essere diverse dai valori predefiniti creati dalla Creazione guidata nuovo progetto di Visual Studio. Verifica di avere configurato le impostazioni di generazione del progetto per produrre app e DLL compatibili con Windows PE, come segue:

  1. Devi sviluppare app di Windows PE con codice C o C++ nativo, che non utilizza MFC o ATL. Se usi la Creazione guidata nuovo progetto di Visual Studio, scegli quindi un progetto Win32 e assicurati che non siano selezionati né MFC né ATL.

  2. Configura le opzioni del progetto in modo che si colleghino alle librerie di runtime C/C++ statiche, non alla versione con estensione dll di Msvcrt.dll.

  3. Apri le proprietà del progetto e configura Proprietà di configurazione\Libreria di runtime C/C++ su Multithread o Debug multithread, non una delle versioni con estensione dll. Se non esegui questo passaggio, è possibile che l'app non venga eseguita su Windows PE.

  4. Se prevedi di ospitare l'app sulla versione a 64 bit di Windows PE, configura le opzioni di generazione del progetto in modo da compilare tutti i file binari con il compilatore x64 in Visual Studio.

  5. Se prevedi di ospitare l'app sulla versione a 32 bit di Windows PE, configura le opzioni del progetto per la compilazione con il compilatore x86.

  6. Verifica che l'opzione /clr: del compilatore non sia impostata per il progetto. Questa opzione produce codice C++ gestito, che non sarà eseguito su Windows PE.

WarningAvviso
L'app può utilizzare file personalizzati con estensione dll scritti da te oppure ottenuti in licenza da terzi. Aggiungi questi file con estensione dll alla tua app per Windows PE. Non usare tuttavia Msvcrt.dll e non includere file con estensione dll di Windows aggiuntivi che non facciano parte di Windows PE.

Windows PE è un sistema operativo leggero, di tipo bootstrap, basato su un sottoinsieme di componenti del sistema operativo Windows. È stato progettato per ospitare app di distribuzione e di ripristino. Contiene quindi molti file binari di Windows necessari per ospitare le API di maggiore importanza per queste classi di app. A causa della dimensione e di altri vincoli di progettazione, non tutti i file binari di Windows sono presenti in Windows PE e quindi non tutte le API di Windows sono presenti o utilizzabili.

Ecco le API supportate in Windows PE:

  1. Set di API Windows (Mincore.lib).

  2. API di Gestione e manutenzione immagini distribuzione (Dismapi.lib).

  3. API di acquisizione immagini per Windows (Wimgapi.lib).

Se il comportamento di un'API è uguale a quello nel sistema operativo Windows completo e corrisponde a quanto documentato in Windows SDK per sistemi operativi Windows, l'API sarà considerata supportata e potrà essere usata dalle app, se non altrimenti specificato. Poiché Windows PE è basato su componenti di Windows, contiene un sottoinsieme significativo di API di Windows pubblicate in Windows SDK per sistemi operativi Windows. I parametri, le convenzioni di chiamata e i comportamenti di queste API supportate saranno uguali o quasi uguali a quelli delle API nel sistema operativo Windows completo, a meno che non siano influenzata dall'ambiente specifico di Windows PE. Le app che usano solo queste API dovrebbero essere trasportabili tra il sistema operativo Windows completo e Windows PE.

In alcuni casi un sottoinsieme dei valori di parametro possibili sarà utilizzabile anche su Windows PE. Ciò può dipendere da condizioni esclusive dell'ambiente di runtime, ad esempio l'esecuzione su un supporto di sola lettura, la mancanza di accesso a uno stato permanente o altre limitazioni di progettazione. In questo caso, è possibile che l'API non sia supportata, ma che possa essere usata comunque per eseguire un'attività specifica, in mancanza di alternative.

In generale, se un'API non funziona correttamente o non funziona affatto su Windows PE, non è supportata e non deve essere usata, anche se si trova in un file binario incluso in Windows PE. È possibile che l'API non funzioni perché Windows PE è un sottoinsieme del sistema operativo di Windows o a causa di considerazioni di progettazione di runtime specifiche di Windows PE. Questi errori non sono considerati bug in Windows PE.

Poiché molti componenti di Windows non sono presenti in Windows PE, molte API non sono disponibili. Potrebbero essere completamente assenti perché il file binario di Windows in cui si trovano non è presente. In alternativa, potrebbero essere solo parzialmente presenti perché, anche se il file binario di Windows in cui si trovano è presente, uno o più file binari da cui dipendono sono assenti. Inoltre, alcune API presenti in Windows PE non funzionano correttamente e si comportano in modo diverso rispetto a Windows. Queste API non sono supportate e non devono essere usate, perché il loro comportamento su Windows PE non è definito.

In alcuni casi non è disponibile alcuna API adatta per eseguire un'attività specifica. Per trovare una soluzione alternativa, è necessario disporre di logica di app diversa, di progettazione di algoritmo diversa o della ridefinizione del problema sottostante.

Vedere anche

Mostra:
© 2015 Microsoft