1

我正在为我正在从事的一个大型项目进行 MSI 安装,并且我很想了解更多关于我看到的这些属性的信息。

它们是诸如 [TARGETDIR] 之类的东西或任何包装在“[PROPERTNAMEHERE]”中的东西。我想知道他们是否是这些地方的列表?

附带说明一下,无论如何都可以从自定义操作中访问所有这些属性。我查看了 Context.Parameters 集合,但没有看到任何内容。我一直将 /name="[TARGETDIR]\" 作为 CustomActionData 传递给 customaction,但这还不够。

谢谢

史蒂夫

4

3 回答 3

1

在使用基于 MSI 的包时,了解属性非常重要。首先你应该知道有两种属性,公共属性私有属性。使用自定义操作时,您应该始终使用公共属性,以避免在安装过程从 InstallUI 序列传递到 InstallExecute 序列时重置它们的值。

此外,非常重要的是,自定义操作在延迟运行时无法获取/设置属性。只有立即的(即非延迟的)自定义操作可以获取/设置属性值。

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

现在,关于自定义操作,您可以编写 C++、C# 或 VBScript 自定义操作来在安装期间获取/设置属性。

不建议将VBScript用于官方应用程序版本,但您可以将它用于需要在内部使用的快速操作。

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

如果这样更方便,您还可以获得类似的 DLL编写 C# 代码。

确保您不尝试将标准 DLL 作为自定义操作运行非常重要,一些商业/免费设置创作工具也支持这一点,但不是全部。如果您打算编写一个 DLL 自定义操作,最好从一开始就使用上面链接的两个示例 (C++/C#) 之一。

于 2013-02-20T12:24:23.073 回答
0

发布此消息后几秒钟,我找到了有关属性列表的内容:http: //msdn.microsoft.com/en-us/library/windows/desktop/aa370905 (v=vs.85).aspx

现在我正在寻找一种从代码中访问这些的方法?

于 2013-02-19T14:19:14.490 回答
0

如果您使用的是 WIX...

首先回答您的旁注-您可以从自定义操作中访问自定义值(我假设您知道如何设置自定义操作...)-查看您的会话对象(自定义操作的参数)-这个有一个带有索引器的 CustomActionData。通过指定来指定要从中删除的属性的名称

session.CustomActionData["INSTALLLOCATION"]

但是,您需要先将该属性添加到您的自定义操作中,然后才能访问它 - 为此,您需要告诉 wix 进行设置...

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

要回答您的其他问题 - 不,我认为您无法在代码中获得这些值,我一直不得不编写它们的脚本。

高温高压

于 2013-02-19T14:59:12.677 回答