1

我正在创建一个 wix 安装程序。在一些 wxs 文件中,我定义了一些属性,并且我还在 C# 自定义操作中创建了一些会话属性。

现在我的要求是列出所有会话属性。因此,为此我查询了属性表并获得了在 .wxs 文件中定义的所有属性。

为此,我使用了以下自定义操作:

Microsoft.Deployment.WindowsInstaller.View listBoxView = session.Database.OpenView(string.Format("select * from Property"));
            listBoxView.Execute();

            while (true)
            {
                using (Record r = listBoxView.Fetch())
                {
                    if (r == null)
                    {
                        break;
                    }
                    else
                    {
                           Console.WriteLine(r[1].ToString(), r[2].ToString());

                        }

                    }
                }
            }
        }

但它没有列出我使用 c# 自定义操作创建的任何会话属性。

有人可以帮我列出我使用 c# 自定义操作创建的属性或这些属性的存储位置吗?

非常感谢

4

2 回答 2

2

当您按照您在示例中的方式查询属性表时,您只会获得在 WiX 创作中静态定义的那些属性,这是意料之中的。在安装时有一个称为内存属性集合的概念 - 这包括以各种方式定义的所有属性:在属性表中静态提供、通过命令行提供、系统提供、在自定义操作中定义等。

Session您可以通过对象访问所有这些属性。只需调用session[name]name您将获得的属性的名称在哪里。我怀疑是否为属性定义了一个枚举器,但在现实生活中,您很少需要迭代属性 - 您宁愿尝试获得某个属性。

于 2012-04-06T19:49:15.130 回答
0

如果您真的需要枚举它(需要 MSI 4.0 或更高版本),解决方法:

在项目中添加完整的日志记录

<Property Id="MsiLogging" Value="Iwearucmopvx" />

这会将整个安装过程记录到您的 %TEMP% 文件夹中。

然后使用以下命令获取日志文件位置:

var logFile = session["MsiLogFileLocation"];

由于日志文件被 MSI 日志锁定,您必须以共享模式访问它:

new FileStream(logFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)

阅读它并通过搜索以“PROPERTY CHANGE:”开头的行来获取最新的内存中 PROPERTY 值。

MSI (c) (90:78) [21:07:16:108]: PROPERTY CHANGE: Adding MsiRunningElevated property. Its value is '1'.
MSI (c) (90:78) [21:07:16:108]: PROPERTY CHANGE: Adding Privileged property. Its value is '1'.
MSI (c) (90:78) [21:07:16:108]: Note: 1: 1402 2: HKEY_CURRENT_USER\Software\Microsoft\MS Setup (ACME)\User Info 3: 2 
MSI (c) (90:78) [21:07:16:108]: PROPERTY CHANGE: Adding USERNAME property. Its value is 'Employee'.
MSI (c) (90:78) [21:07:16:108]: Note: 1: 1402 2: HKEY_CURRENT_USER\Software\Microsoft\MS Setup (ACME)\User Info 3: 2 
MSI (c) (90!A8) [21:07:30:900]: PROPERTY CHANGE: Modifying WEB_APP_NAME property. Its current value is '$projectname$/v1.0.0'. Its new value: '$projectname$\v1.0.0'.
MSI (c) (90!A8) [21:07:30:901]: PROPERTY CHANGE: Adding WEB_APP_NAME_NORMAL property. Its value is '$projectname$/v1.0.0'.
MSI (c) (90!A8) [21:07:30:901]: PROPERTY CHANGE: Adding WEB_APP_NAME_LAST property. Its value is 'v1.0.0'.

缺点是 %TEMP% 文件夹中总会留下一个日志。也许添加一些清理或其他东西。

于 2014-04-22T19:18:36.170 回答