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