共用方式為


自定義動作安全性

安裝程式預設會以使用者許可權執行自定義動作,以限制對系統的自定義動作存取。 如果已安裝受控應用程式,或已針對提高許可權指定系統原則,安裝程式可能會執行具有更高許可權的自定義動作。

您應該使用 MsiHiddenProperties 屬性,並 msidbCustomActionTypeHideTarget,以防止記錄自定義動作所使用的敏感性資訊。 如需 msidbCustomActionTypeHideTarget msidbCustomActionTypeHideTarget 的詳細資訊,請參閱 自定義動作隱藏目標選項

在設定 CustomActionData 屬性之後清除它,以確保不再提供敏感數據。 下列範例程式代碼是立即 DLL 自定義動作所使用的代碼段,該動作會設定資料以供名為 「MyDeferredCA」 的延遲自定義動作使用:

#include <windows.h>
#include <Msiquery.h>
#pragma comment(lib, "msi.lib")

UINT __stdcall MyImmediateCA(MSIHANDLE hInstall)
{
    // set up information for deferred custom action called MyDeferredCA
    const TCHAR szValue[] = TEXT("data");
    UINT uiStat = ERROR_INSTALL_FAILURE;
    if (ERROR_SUCCESS == MsiSetProperty(hInstall, TEXT("MyDeferredCA"), szValue))
    {
        uiStat = MsiDoAction(hInstall, TEXT("MyDeferredCA"));

        // clear CustomActionData property
        if (ERROR_SUCCESS != MsiSetProperty(hInstall, TEXT("MyDeferredCA"), TEXT("")))
            return ERROR_INSTALL_FAILURE;
    }

    return (uiStat == ERROR_SUCCESS) ? uiStat : ERROR_INSTALL_FAILURE;    
}

請注意,只有 延遲執行的自定義動作 才能使用 msidbCustomActionTypeNoImpersonate 屬性。 如需詳細資訊,請參閱 自訂動作 In-Script 執行選項

如果未為自定義動作設定 msidbCustomActionTypeNoImpersonate 位,安裝程式會以使用者層級許可權執行自定義動作。 如需詳細資訊,請參閱 自訂動作 In-Script 執行選項

如果 msidbCustomActionTypeNoImpersonate 位已設定,且受控應用程式正以系統管理員許可權安裝,安裝程式可能會以較高的許可權執行自定義動作。 不過,如果使用者嘗試在沒有系統管理員許可權的情況下安裝受控應用程式,則不論是否已設定 msidbCustomActionTypeNoImpersonate,安裝程式都會以使用者層級許可權執行應用程式。

請注意,即使未設定 msidbCustomActionTypeNoImpersonate 位,自定義動作仍可能會以系統許可權執行。 如果系統管理員使用 Windows 2000 在執行終端伺服器角色服務的伺服器上為所有使用者安裝應用程式,而且動作未標示為 msidbCustomActionTypeTSAware,就會發生這種情況。 如果沒有用戶內容,則自定義動作也可能以系統許可權執行。 例如,如果在 Windows 2000 應用程式部署叫用的安裝期間,目前沒有登入的使用者。

建立自己的自定義動作時,您應該一律使用安全方法撰寫自定義動作。 如需詳細資訊,請參閱 保護自定義動作的指導方針