自定义操作安全性
安装程序默认使用用户权限运行自定义操作,以限制对系统的自定义操作的访问。 如果安装了托管应用程序,或者系统策略已为提升的权限指定,安装程序可以使用提升的权限运行自定义操作。
应使用 MsiHiddenProperties 属性和 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 应用程序部署调用的安装过程中当前没有登录用户。
创建自己的自定义操作时,应始终使用安全方法创作自定义操作。 有关详细信息,请参阅 保护自定义操作指南。