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 に答える