Aracılığıyla paylaş


Yamaları Kaldırma

Windows Installer 3.0'dan başlayarak bazı düzeltme eklerini uygulamalardan kaldırmak mümkündür. Düzeltme eki kaldırılabilir bir düzeltme eki olmalıdır. Sürüm 3.0'dan küçük bir Windows Installer sürümü kullanırken düzeltme eklerini kaldırma düzeltme eki ürününü kaldırmayı ve düzeltme ekini uygulamadan ürünü yeniden yüklemeyi gerektirir.

Windows Installer 2.0: Desteklenmiyor. Windows Installer 3.0'dan önceki bir Windows Installer sürümü kullanılarak uygulanan düzeltme ekleri kaldırılamaz.

Aşağıdaki yöntemlerden herhangi biri tarafından bir düzeltme ekinin kaldırılmasını çağırdığınızda, yükleyici düzeltme ekini kaldırmayı isteyen uygulama veya kullanıcı tarafından görünen ilk üründen kaldırmayı dener. Yükleyici, düzeltme eki uygulanmış ürünleri şu sırayla arar: kullanıcı başına yönetilen, kullanıcı başına yönetilmeyen, makine başına.

Komut satırında MSIPATCHREMOVE kullanarak düzeltme eki kaldırma

msiexec.exe ve Komut Satırı Seçeneklerikullanarak bir komuttan düzeltme eklerini kaldırabilirsiniz. Aşağıdaki örnek komut satırı, MSIPATCHREMOVE özelliğini ve /i komut satırı seçeneğini kullanarak, bir uygulamadan kaldırılabilir bir yama olan example.mspexample.msi'yı kaldırır. /i kullanırken, patch'li uygulama, uygulamanın paketinin yolu (.msi dosyası) veya uygulamanın ürün kodu () ile tanımlanabilir. Bu örnekte, uygulamanın yükleme paketi "\\server\share\products\example\example.msi" konumundadır ve uygulamanın ProductCode özelliği "{0C9840E7-7F0B-C648-10F0-4641926FE463}" şeklindedir. Düzeltme eki paketi "\\server\share\products\example\patches\example.msp" konumunda bulunur ve düzeltme eki kodu GUID'i "{EB8C947C-78B2-85A0-644D-86CEEF8E07C0}" şeklindedir.

Msiexec /I {0C9840E7-7F0B-C648-10F0-4641926FE463} MSIPATCHREMOVE={EB8C947C-78B2-85A0-644D-86CEEF8E07C0} /qb

Standart komut satırı seçeneklerini kullanarak düzeltme eki kaldırma

Windows Installer sürüm 3.0'dan başlayarak, Windows Installer düzeltme eklerini bir komut satırından kaldırmak için Microsoft Windows İşletim Sistemi Güncelleştirmeleri (update.exe) tarafından kullanılan standart komut satırı seçeneklerini kullanabilirsiniz.

Aşağıdaki komut satırı, MSIPATCHREMOVE özelliğini kullanarak bir düzeltme ekini kaldırmak için kullanılan Windows Installer komut satırının standart komut satırı eşdeğeridir. /package seçeneğiyle kullanılan /uninstall seçeneği, bir düzeltme ekinin kaldırılmasını belirtir. Düzeltme eki, tam yolu veya düzeltme eki kodunun GUID'i ile başvurulabilir.

Msiexec /package {0C9840E7-7F0B-C648-10F0-4641926FE463} /uninstall {EB8C947C-78B2-85A0-644D-86CEEF8E07C0} /passive

Not

/passive standart seçeneği, Windows Installer /qb seçeneğinin tam eşdeğeri değildir.

 

RemovePatches yöntemini kullanarak düzeltme eki kaldırma

Windows Installer Otomasyon Arabirimikullanarak bir komut dosyası üzerinden düzeltme eklerini kaldırabilirsiniz. Aşağıdaki betik örneği, Installer nesnesinin RemovePatches yöntemini kullanarak bir uygulamadan example.msp adlıkaldırılabilir bir düzeltme ekini example.msikaldırır. Kaldırılan her düzeltme eki, düzeltme eki paketinin tam yolu veya düzeltme eki kodu GUID'si ile temsil edilebilir. Bu örnekte, uygulamanın yükleme paketi "\\server\share\products\example\example.msi" konumundadır ve uygulamanın ProductCode özelliği "{0C9840E7-7F0B-C648-10F0-4641926FE463}" şeklindedir. Düzeltme eki paketi "\\server\share\products\example\patches\example.msp" konumunda bulunur ve düzeltme eki kodu GUID'i "{EB8C947C-78B2-85A0-644D-86CEEF8E07C0}" şeklindedir.

const msiInstallTypeSingleInstance = 2
const PatchList = "{EB8C947C-78B2-85A0-644D-86CEEF8E07C0}"
const Product = "{0C9840E7-7F0B-C648-10F0-4641926FE463}"

Dim installer
Set installer = CreateObject("WindowsInstaller.Installer")

installer.RemovePatches(PatchList, Product, msiInstallTypeSingleInstance, "")

Program Ekle/Kaldır'ı kullanarak düzeltme eki kaldırma

Windows XP ile, Program Ekle/Kaldır'ı kullanarak düzeltme eklerini kaldırabilirsiniz.

MsiRemovePatches işlevini kullanarak düzeltme eki kaldırma

Uygulamalarınız Windows Installer İşlevlerikullanarak diğer uygulamalardan düzeltme eklerini kaldırabilir. Aşağıdaki kod örneği, kaldırılabilir düzeltme eki example.msp'i example.msibir uygulamadan, MsiRemovePatches işlevini kullanarak kaldırır. Düzeltme eki, düzeltme eki paketinin tam yolu veya kod GUID'i ile başvurulabilir. Bu örnekte, uygulamanın yükleme paketi "\\server\share\products\example\example.msi" konumundadır ve uygulamanın ProductCode özelliği "{0C9840E7-7F0B-C648-10F0-4641926FE463}" şeklindedir. Düzeltme eki paketi "\\server\share\products\example\patches\example.msp" konumunda bulunur ve düzeltme eki kodu GUID'i "{EB8C947C-78B2-85A0-644D-86CEEF8E07C0}" şeklindedir.

    UINT uiReturn = MsiRemovePatches(
          /*szPatchList=*/TEXT("\\server\\share\\products\\example\\patches\\example.msp"),
          /*szProductCode=*/  TEXT("{0C9840E7-7F0B-C648-10F0-4641926FE463}"),
          /*eUninstallType=*/ INSTALLTYPE_SINGLE_INSTANCE,
          /*szPropertyList=*/ NULL);

MsiRemovePatches işlevini kullanarak tüm uygulamalardan düzeltme eki kaldırma

Tek bir düzeltme eki, bilgisayardaki birden fazla ürünü güncelleştirebilir. Bir uygulama, bilgisayardaki tüm ürünleri listelemek ve ürünün belirli bir örneğine bir düzeltme eki uygulanıp uygulanmadığını belirlemek için MsiEnumProductsExkullanabilir. Uygulama daha sonra MsiRemovePatcheskullanarak düzeltme ekini kaldırabilir. Örneğin, düzeltme eki birden çok ürün tarafından paylaşılan bir bileşendeki bir dosyayı güncelleştirirse ve düzeltme eki her iki ürünü de güncelleştirmek için dağıtılırsa, tek bir düzeltme eki birden çok ürünü güncelleştirebilir.

Aşağıdaki örnek, bir uygulamanın, kullanıcının kullanabileceği tüm uygulamalardan bir düzeltme ekini kaldırmak için Windows Installer'ı nasıl kullanabileceğini gösterir. Başka bir kullanıcı için kullanıcı başına yüklenen uygulamalardan düzeltme ekini kaldırmaz.

#ifndef UNICODE
#define UNICODE
#endif //UNICODE

#ifndef _WIN32_MSI
#define _WIN32_MSI 300
#endif //_WIN32_MSI

#include <stdio.h>
#include <windows.h>
#include <msi.h>

#pragma comment(lib, "msi.lib")

const int cchGUID = 38;

///////////////////////////////////////////////////////////////////
// RemovePatchFromAllVisibleapplications:
//
// Arguments:
//    wszPatchToRemove - GUID of patch to remove
//
///////////////////////////////////////////////////////////////////
//
UINT RemovePatchFromAllVisibleapplications(LPCWSTR wszPatchToRemove)
{
    if (!wszPatchToRemove)
        return ERROR_INVALID_PARAMETER;

    UINT uiStatus = ERROR_SUCCESS;
    DWORD dwIndex = 0;
    WCHAR wszapplicationCode[cchGUID+1] = {0};

    DWORD dwapplicationSearchContext = MSIINSTALLCONTEXT_ALL;
    MSIINSTALLCONTEXT dwInstallContext = MSIINSTALLCONTEXT_NONE;

    do
    {
        // Enumerate all visible applications in all contexts for the caller.
        // NULL for szUserSid defaults to using the caller's SID
        uiStatus = MsiEnumProductsEx(/*szapplicationCode*/NULL,
         /*szUserSid*/NULL,
         dwapplicationSearchContext,
         dwIndex,
         wszapplicationCode,
         &dwInstallContext,
         /*szSid*/NULL,
         /*pcchSid*/NULL);

        if (ERROR_SUCCESS == uiStatus)
        {
            // check to see if the provided patch is
            // registered for this application instance
            UINT uiPatchStatus = MsiGetPatchInfoEx(wszPatchToRemove,
             wszapplicationCode,
             /*szUserSid*/NULL,
             dwInstallContext,
             INSTALLPROPERTY_PATCHSTATE,
             NULL,
             NULL);

            if (ERROR_SUCCESS == uiPatchStatus)
            {
                // patch is registered to this application; remove patch
                wprintf(L"Removing patch %s from application %s...\n",
                 wszPatchToRemove, wszapplicationCode);
                                
                UINT uiRemoveStatus = MsiRemovePatches(
                 wszPatchToRemove,
                 wszapplicationCode,
                 INSTALLTYPE_SINGLE_INSTANCE,
                 L"");

                if (ERROR_SUCCESS != uiRemoveStatus)
                {
                    // This halts the enumeration and fails. Alternatively
                    // you could output an error and continue the
                    // enumeration
                     return ERROR_FUNCTION_FAILED;
                }
            }
            else if (ERROR_UNKNOWN_PATCH != uiPatchStatus)
            {
                // Some other error occurred during processing. This
                // halts the enumeration and fails. Alternatively you
                // could output an error and continue the enumeration
                 return ERROR_FUNCTION_FAILED;
            }
            // else patch was not applied to this application
            // (ERROR_UNKNOWN_PATCH returned)
        }

        dwIndex++;
    }
    while (uiStatus == ERROR_SUCCESS);

    if (ERROR_NO_MORE_ITEMS != uiStatus)
        return ERROR_FUNCTION_FAILED;

    return ERROR_SUCCESS;
}

Düzeltme Eki Sıralama

Yamaları Kaldırma

Kaldırılabilir Yamalar

Yama Kaldırma Özel Eylemleri

MSIPATCHREMOVE

MsiEnumapplicationsEx

MsiGetPatchInfoEx

MsiRemovePatches