Problema
Usando as variáveis de ambiente conhecidas, como %programfiles%
, programfiles(x86)
não funciona mais, porque:
- O XP não conhece a variável
programfiles(x86)
-
programfiles
refere-se à pasta x86 ou x64, com base na arquitetura de a máquina. (Ou mais específico: Para a arquitetura do processo chamando a variável) - Para o XP, o nome da pasta de 32 bits está localizado (por exemplo,
C:\Programme (x86)
para um XP alemão executando x64)
Assumindo que há 2 idiomas, 2 tipos de sistema operacional (7,10 se comportam de maneira igual a "tipo") e 2 tipos de arquitetura, as seguintes opções são possíveis com ferramentas "nativas", mas já é desajeitado:
Para criar um atalho para a versão "mais alta", você precisa implantar 3 "regras" de atalho:
Shortcut |Target | Purpose
App |%programfiles%\App\app.exe | x86-app on a x86-xp-7-10 or
| | x64-app on a x64-xp-7-10
App |%programfiles(x86)%\App\app.exe | x86-app on a x64-7-10
App |C:\Programme (x86)\App\app.xe | x86-app on a x64-xp (german)
Supondo que você também queira habilitar a possibilidade de cada aplicativo estar disponível como x86 e x64 ao mesmo tempo, fica ainda pior, porque: %programfiles%
resultará em resultados errados (pode ser x86 ou x64) - Então você precisa de filtros WMI em todos os "atalhos" criados para lidar com isso.
Uma regra como esta:
Shortcut |Target | Purpose
App 64 |%programfiles%\app\app.exe | x64-app on a x64-7-10
vincularia acidentalmente o 32 bit version
on 32-bit-systems
com o nome x64
- sem algum filtro WMI, desativando a regra.
Portanto, seriam 4 regras, 2 com filtros WMI:
Shortcut |Target | Purpose
App 64 |%programfiles%\App\app.exe | x64-app on a x64-xp-7-10 + wmi-filter
App 32 |%programfiles%\App\app.exe | x86-app on a x86-xp-7-10 + wmi_filter
App 32 |%programfiles(x86)%\App\app.exe | x86-app on a x64-7-10
App 32 |C:\Programme (x86)\App\app.xe | x86-app on a x64-xp (german)
Então - 240 regras de atalho, se houver apenas uma "língua estrangeira" - Mas onde 5 deles - > 480 regras de atalho propensas a erros. - > Não!
O objetivo
Eu queria poder reduzir a quantidade de trabalho necessária. Apenas criando (no pior caso) 2 entradas por atalho, afirmando:
- Este aplicativo pode estar disponível em qualquer lugar, como versão de 32 bits.
- Este aplicativo pode estar disponível apenas em máquinas de 64 bits, como versão de 64 bits.
Variáveis de ambiente personalizadas por GPO, usando filtros WMI
Como solução para essa pergunta, criei 1 GPO para criar as variáveis de ambiente personalizadas necessárias:
Variable | Purpose
%pf_x86% | Program Files x86 on any system
%pf_x64% | Program Files x64 on any system (if existing)
Então, esse (GPO único) se resume a um total de 6 regras (+1 para cada idioma adicional do XP):
Variable | Value | OS | WMI Filter (Item-Level-Targeting):
%pf_x86% | %programfiles% |7 x86 | select * from Win32_OperatingSystem
WHERE Version like "6.%" AND
ProductType="1" AND
NOT OSArchitecture = "64-bit"
%pf_x86% | %programfiles(x86)% |7,10 x64| select * from Win32_OperatingSystem
WHERE (Version like "6.%" OR
Version like "10.%") AND
ProductType="1" AND
OSArchitecture = "64-bit"
%pf_x86% | %programfiles% |XP x86 | select * from Win32_OperatingSystem
WHERE (Version like "5.1%") AND
ProductType="1"
%pf_x86% | C:\Programme (x86) |XP x64 | select * from Win32_OperatingSystem
WHERE (Version like "5.2%") AND
ProductType="1" AND OSLanguage=1031
%pf_x64% | %programfiles% |7,10 x64| select * from Win32_OperatingSystem
WHERE Version like (Version like "6.%" OR
Version like "10.%") AND
ProductType="1" AND
OSArchitecture = "64-bit"
%pf_x64% | %programfiles% |XP x64 | select * from Win32_OperatingSystem
WHERE (Version like "5.2%") AND
ProductType="1"
(os idiomas do sistema operacional estão descritos aqui: link )
Resultado
Estavariáveldeambientepersonalizadoagoramepermiteconfigurarexatamentedoisshurtcutsporaplicativo-NãoimportaqualversãodoOSestejasendoexecutadaemqualquerarquiteturaouidioma
Shortcut|Target|PurposeApp64|%pf_x64%\App\app.exe|x64-apponanyenvironment.App32|%pf_x86%\App\app.exe|x86-apponanyenvironment.
Eseambosexistirem,osdoisatalhosserãoimplantados.
Windows7,64bits,ML
Windows7,32bits,ML
WindowsXP,32bits,ger
pp.