我需要以管理员而不是系统运行我的安装程序,因为它需要使用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的十六进制表示?或者有一个更好的解决方案,然后编辑安装程序后期构建?
答案 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
中的属性的更多信息