Udostępnij za pośrednictwem


Określanie celu aplikacji dla systemu Windows

W systemie Windows 8.1 lub nowszym funkcje GetVersion oraz GetVersionEx zostały wycofane. Od systemu Windows 10 funkcja VerifyVersionInfo jest również przestarzała. Nadal można wywoływać przestarzałe funkcje, ale jeśli aplikacja nie jest przeznaczona specjalnie dla systemu Windows 8.1 lub nowszego, funkcje będą zwracać wersję systemu Windows 8 (6.2).

Notatka

getVersion, GetVersionEx, VerifyVersionInfoi funkcje pomocnika wersji są przeznaczone tylko dla aplikacji klasycznych. Aplikacje uniwersalne systemu Windows mogą używać właściwości AnalyticsInfo.VersionInfo na potrzeby danych telemetrycznych i dzienników diagnostycznych.

Aby aplikacja była zgodna z systemem Windows 8.1 lub nowszym, należy uwzględnić manifest pliku wykonywalnego (aplikacji). Następnie w sekcji <zgodności> manifestu należy dodać element <obsługiwanego systemuOS> dla każdej wersji systemu Windows, którą chcesz zadeklarować, że aplikacja obsługuje.

Poniższy przykład przedstawia plik manifestu aplikacji dla aplikacji, która obsługuje wszystkie wersje systemu Windows z systemu Windows Vista do systemu Windows 11:

<!-- example.exe.manifest -->
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
    <assemblyIdentity
        type="win32"
        name="Contoso.ExampleApplication.ExampleBinary"
        version="1.2.3.4"
        processorArchitecture="x86"
    />
    <description>Contoso Example Application</description>
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
        <application>
            <!-- Windows 10 and Windows 11 -->
            <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
            <!-- Windows 8.1 -->
            <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
            <!-- Windows 8 -->
            <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
            <!-- Windows 7 -->
            <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
            <!-- Windows Vista -->
            <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
        </application>
    </compatibility>
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
            <requestedPrivileges>
                <!--
                  UAC settings:
                  - app should run at same integrity level as calling process
                  - app does not need to manipulate windows belonging to
                    higher-integrity-level processes
                  -->
                <requestedExecutionLevel
                    level="asInvoker"
                    uiAccess="false"
                />   
            </requestedPrivileges>
        </security>
    </trustInfo>
</assembly>

Deklarowanie obsługi systemu Windows 8.1 lub nowszego w manifeście aplikacji nie będzie miało żadnego wpływu podczas uruchamiania aplikacji w poprzednich systemach operacyjnych.

Powyższy manifest aplikacji zawiera również sekcję <trustInfo>, która określa, jak system powinien traktować ją w odniesieniu do Kontrola Konta Użytkownika (UAC). Dodanie trustInfo nie jest niezbędne, ale zdecydowanie zalecane, nawet jeśli aplikacja nie potrzebuje żadnego konkretnego zachowania związanego z funkcją kontroli dostępu użytkownika. Szczególnie, jeśli w ogóle nie dodasz trustInfo, wówczas 32-bitowe wersje x86 Twojej aplikacji będą podlegać wirtualizacji plików UAC, co umożliwia zapisywanie w folderach wymagających uprawnień administratora, takich jak foldery systemowe Windows, które w innym przypadku by się nie powiodły, ale przekierowuje je do folderu "VirtualStore" przypisanego do użytkownika.