Pergunta

Eu quero aproveitar o novo Windows 7 funcionalidade da barra de tarefas em um aplicativo .NET e gostaria de saber o que as pessoas pensam é a melhor maneira de verificar se há recursos do Windows 7 em .NET. Meu objetivo é ter código distinto para Windows XP e Windows 7.

Eu não estou overally afiado em:

  • apenas envolver o código do Windows 7 em um try catch
  • Se OS = "Windows 7" Então ...

A menos é claro que isso é o que mais está fazendo. Eu realmente ter caçado em todos os lugares para uma boa abordagem, mas sem sucesso. O código não gerenciado Microsoft wrapper de bibliotecas parece apenas supor que está sendo executado no Windows 7 ...

Foi útil?

Solução

Eu acho que não há nada de errado com if OS = "Windows 7". Claro,

  • deve ser if OS >= "Windows 7" (de modo que ele não quebrar no Windows 7.1 ou o que será o sucessor) e
  • deve ser feito através da verificação Environment.OSVersion (Platform e> = Version).

Se você não quer encher o seu código com if (isWindows7) {...}, você pode querer colocar o código específico da plataforma em uma classe separada. Por exemplo, você poderia criar uma interface

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

e duas implementações desta classe, uma para> = Win 7 e um para os outros (que faz coisas diferentes ou nada). Quando seu aplicativo é iniciado, você instancia alguns variável global do tipo IOSSpecific com qualquer uma das duas implementações.

Outras dicas

Eu esperaria que você faz:

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

Não sei o que valoriza o id Windows7 é apesar de tudo.

Eu normalmente fazer esta pergunta para decidir qual objeto que criar a partir de minhas fábricas para suportar diferentes plataformas. Melhor do que polvilhar estes todo o código base ou capturar exceções.

Se você usar uma biblioteca wrapper como Código Pack ( http://code.msdn.microsoft.com / WindowsAPICodePack ) ele faz a verificação de versão para você. Vá em frente e chamar os métodos de biblioteca e vai jogar um PlatformNotSupportedException se você tentar algo que não está no sistema operacional quando você está runnning.

Você também pode pegar EntryPointNotFoundException Se você é P / Invocando em alguns Windows DLL. Esta é a melhor abordagem ao fazer seu próprio interoperabilidade, porque a funcionalidade pode ser adicionados (por atualizações e service packs) anos a partir de agora em OS de nível inferior.

Com esses dois, você pode armazenar em cache algum tipo de bandeira que você lembra não há nenhuma barra de tarefas ou não há bibliotecas ou você não tem tudo o que possui, de modo a salvar o hit perf de jogar e pegar a exceção.

Se você insistir em fazer sua própria verificação de versão e ver o que OS você está, por favor lembre-se a magia de> =. Você sabe o quanto código está lá fora, que os testes a versão é exatamente XP SP2 e, em seguida, coloca-se uma caixa de mensagem dizendo "Requer XP SP2 ou mais tarde"? Um tonelada . Na verdade, é por isso que a maior versão para Win7 é de 6 - de modo que toda a verificação de código de "igual a 6" seria ainda trabalho. Não seja aquele cara.

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

Você pode encontrar todos os números maior / menor em http://msdn.microsoft.com/en-us/library/ms724832%28VS.85%29.aspx

Kate

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top