2013-02-19 86 views
1

我正在玩MSI安装,用于我正在处理的大型项目,并且很想知道更多关于我看到的这些属性的信息。MSI安装程序数据属性

他们是像[TARGETDIR]或任何包裹在“[PROPERTNAMEHERE]”中的东西。我试图找出他们是否是这些地方的清单?

在附注中,是否有从自定义操作访问所有这些属性的方法。我查看了Context.Parameters集合,但没有看到任何内容。我一直将/ name =“[TARGETDIR] \”作为CustomActionData传递给一个定制,但这还不够。

感谢

史蒂夫

+0

你用什么技术来构建你的MSI? – 2013-02-19 14:36:53

回答

0

如果您正在使用WIX ...

先回答你的侧面说明 - 你可以从一个自定义操作中访问自定义值(我假设你知道如何建立一个自定义操作... ) - 看看你的会话对象(自定义操作的参数) - 它有一个CustomActionData,它有一个索引器。通过指定

session.CustomActionData["INSTALLLOCATION"] 

指定要摆脱它的属性的名称你需要的属性添加到您的自定义操作,然后才能但访问它 - 而要做到这一点,你需要告诉威克斯设置这件事......

<CustomAction Id="UNIQUEID" Return="check" Property="YourCustomActionNameInWix" Value="INSTALLLOCATION=[INSTALLLOCATION]" /> 

为了回答您的其他问题 - 不,我不认为你可以在代码中的这些值我一直有脚本他们。

HTH

+0

我不使用WIX,但也许我应该。不用担心,不过谢谢。 – 2013-02-20 08:26:13

0

Properties与基于MSI软件包工作时,要了解非常重要。首先你应该知道有两种属性,public propertiesprivate properties。处理自定义操作时,应始终使用公共属性,以避免在安装过程从InstallUI Sequence传递到InstallExecute Sequence时重置值。

另外,非常重要,自定义操作在运行延迟时无法获取/设置属性。只有即时的,即未推迟的,custom actions可以获取/设置属性值。

有一个例外,运行延迟自定义操作时,可以从名为“CustomActionData”的特殊属性中获取值。

现在,在自定义操作方面,您可以在安装过程中编写C++,C#或VBScript自定义操作来获取/设置属性。

VBScript is not recommended for an official application release,但是您可以将它用于需要快速使用的内容。

对于C++ custom actions您将获得一个DLL,您可以从中导出一个或多个方法,以在您的自定义操作被触发时进行调用。请注意,函数签名与标准DLL不同,请仔细分析链接的示例。

如果更方便,你也可以得到一个类似的DLL writing C# code

确保您没有尝试run a standard DLL as a custom action,有些commercial/free setup authoring tools支持,但非全部,这一点非常重要。如果您打算编写一个DLL自定义操作,最好从一开始就使用上面链接的两个样本(C++/C#)之一来完成。