什么是MSIUSEREALADMINDETECTION的十六进制表示?

时间:2013-08-09 20:44:02

标签: installer windows-installer vdproj

我需要以管理员而不是系统运行我的安装程序,因为它需要使用Windows身份验证连接到SQL Server数据库。根据我的研究,我需要将MSIUSEREALADMINDETECTION属性设置为“1”

我认为这些安装程序属性具有十六进制表示形式,如http://blogs.msdn.com/b/astebner/archive/2007/05/28/2958062.aspx

中的博客所示
var msidbCustomActionTypeInScript = 0x00000400;
var msidbCustomActionTypeNoImpersonate = 0x00000800

设置值的脚本可用here,但它不提供MSIUSEREALADMINDETECTION的十六进制表示。有谁知道MSIUSEREALADMINDETECTION的十六进制表示?或者有一个更好的解决方案,然后编辑安装程序后期构建?

2 个答案:

答案 0 :(得分:1)

然后编辑安装程序postbuild的更好解决方案是切换到另一个工具,例如Windows Installer XML,它不会将您从基础Windows Installer功能中隐藏起来。

FWIW,当我必须进行postbuild清理时,我倾向于创建转换,然后在postbuild步骤中将转换应用于MSI。这样,随着我的需求发生变化,我只需更新转换,而不必更改任何后期构建代码。

就MSIUSEREALADMINDETECTION属性的十六进制值而言......你在想它。它是1.您提到的另外两个是自定义操作的位掩码列中使用的常量,这就是为什么它们具有十六进制值...以便它们可以逻辑地或者它们。

答案 1 :(得分:1)

您可以在Windows SDK目录中的计算机上找到这些标识符的定义。你没有提到VS版本,开始查看c:\ program files(x86)\ microsoft sdks \ windows \ x.x \ include。如果你有VS2012 +,那么从Windows套件开始查看。 MsiDefs.h文件是您感兴趣的。它包含:

// properties related to UAC
#define IPROPNAME_MSI_UAC_DEPLOYMENT_COMPLIANT TEXT("MSIDEPLOYMENTCOMPLIANT")
#define IPROPNAME_MSI_USE_REAL_ADMIN_DETECTION TEXT("MSIUSEREALADMINDETECTION")

也:

// execution scheduling flags               // default is execute whenever sequenced
msidbCustomActionTypeFirstSequence    = 0x00000100,  // skip if UI sequence already run
msidbCustomActionTypeOncePerProcess   = 0x00000200,  // skip if UI sequence already run in same process
msidbCustomActionTypeClientRepeat     = 0x00000300,  // run on client only if UI already run on client
msidbCustomActionTypeInScript         = 0x00000400,  // queue for execution within script
msidbCustomActionTypeRollback         = 0x00000100,  // in conjunction with InScript: queue in Rollback script
msidbCustomActionTypeCommit           = 0x00000200,  // in conjunction with InScript: run Commit ops from script on success

// security context flag, default to impersonate as user, valid only if InScript
msidbCustomActionTypeNoImpersonate    = 0x00000800,  // no impersonation, run in system context

您可以从中判断出MSIUSEREALADMINDETECTION不是由数字表示,而是属性的名称。您可以使用MsiSetProperty()设置属性值。有关this MSDN section

中的属性的更多信息