Domanda

Voglio sfruttare la nuova funzionalità della barra delle applicazioni di Windows 7 in un'applicazione .NET e vorrei sapere quale sia il modo migliore per verificare le funzionalità di Windows 7 in .NET. Il mio obiettivo è avere un codice distinto per Windows XP e Windows 7.

Non mi piace troppo:

  • semplicemente racchiudendo il codice di Windows 7 in un tentativo di cattura
  • se OS = "Windows 7" Poi...

A meno che ovviamente questo non sia quello che fanno di più. Ho davvero cacciato ovunque per un buon approccio ma senza successo. La libreria di wrapper di codice non gestito di Microsoft sembra supporre che sia in esecuzione su Windows 7 ...

È stato utile?

Soluzione

Penso che non ci sia nulla di sbagliato in se OS = " Windows 7 " ;. Certo,

  • dovrebbe essere se OS > = " Windows 7 " (in modo che non si rompa in Windows 7.1 o qualunque sarà il successore) e
  • dovrebbe essere fatto selezionando Environment.OSVersion (Piattaforma e > = versione).

Se non vuoi ingombrare il tuo codice con if (isWindows7) {...} , potresti voler inserire il codice specifico della piattaforma in una classe separata. Ad esempio, potresti creare un'interfaccia

interface IOSSpecific {
    void AddToJumpList(...);
    ...
}

e due implementazioni di questa classe, una per > = Win 7 e una per gli altri (che fa cose diverse o niente). All'avvio dell'applicazione, si crea un'istanza di una variabile globale di tipo IOSSpecific con una delle due implementazioni.

Altri suggerimenti

Mi aspetterei che tu faccia:

if ( Environment.OSVersion.Platform == windows7Id)
{
    // win7 stuff
}

Non so quale valore sia l'id di Windows7.

Di solito faccio questa domanda per decidere quale oggetto creo dalle mie fabbriche per supportare piattaforme diverse. Meglio che spruzzarli su tutto il codice base o catturare eccezioni.

Se si utilizza una libreria wrapper come Code Pack ( http://code.msdn.microsoft.com / WindowsAPICodePack ) esegue la verifica della versione. Vai avanti e chiami i metodi della libreria e genererà PlatformNotSupportedException se provi qualcosa che non è sul sistema operativo quando corri.

Puoi anche catturare EntryPointNotFoundException se stai invocando / invocando alcune DLL di Windows. Questo è l'approccio migliore quando si esegue la propria interoperabilità, poiché la funzionalità potrebbe essere aggiunta (tramite aggiornamenti e service pack) da anni nel sistema operativo di livello inferiore.

Con entrambi questi, puoi memorizzare nella cache una sorta di flag che ti ricorda che non c'è nessuna barra delle applicazioni o non ci sono librerie o non hai alcuna funzionalità, in modo da salvare il colpo perfetto di lancio e cattura dell'eccezione.

Se insisti nel fare la tua versione controllando e vedendo su quale sistema operativo sei, per favore ricorda la magia di > =. Sai quanto codice esiste là fuori che verifica che la versione sia esattamente XP SP2 e quindi visualizzi una finestra di messaggio che dice "Richiede XP SP2 o successivo"? Una tonnellata . In effetti, è per questo che la versione principale di Win7 è 6, in modo che tutto il codice che controlli "quot" sia uguale a 6 ". funzionerebbe ancora. Non essere quel ragazzo.

if (Environment.OSVersion.Version.Major >= 6)
{
   if (Environment.OSVersion.Version.Minor >= 1)
     // Do Win7 thing
   else
     // Do Vista thing
}
else if (Environment.OSVersion.Version.Major >= 5)
 // Do XP thing

Puoi trovare tutti i numeri maggiori / minori in http://msdn.microsoft.com/en-us/library/ms724832%28VS.85%29.aspx

Kate

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top