【问题标题】:Wix: Cannot list out properties created using C# custom actionWix:无法列出使用 C# 自定义操作创建的属性
【发布时间】:2012-04-06 13:11:35
【问题描述】:

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

现在我的要求是列出所有会话属性。 因此,为此我查询了 Property table 并获得了在 .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# 自定义操作创建的属性或这些属性的存储位置?

非常感谢

【问题讨论】:

    标签: wix custom-action wix3.5 wix3.6


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答。但我的要求是我必须列出所有会话属性,无论是静态的还是内存中的属性集合。如果他们以某种方式列出它们,请告诉我。我可以一一列出它们,但这会非常痛苦,因为我在 c# 代码中定义了很多属性。为您宝贵的 cmets +1,但我没有足够的信用。
    • 否,MSI 仅公开 MsiGetProperty 和 MsiSetProperty。没有 MsiListProperties() 函数,因此 session 能够使用 item[string] get 封装这些函数;放;没有什么可用于实现 IEnumerable 关闭。
    【解决方案2】:

    如果您真的需要枚举它(需要 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%文件夹中总会留下一个日志。也许添加一些清理或其他东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多