2

Wix と WixSharp の両方を初めて使用します。私は最近 Wix を学び、基本的なインストーラーを作成しました。私が使用したプロパティの 1 つは「IniFileSearch」で、IniFile から値を検索し、それを使用してファイルのインストール場所を見つけるのに役立ちました。WixSharp を使用して同じことをしようとしていますが、同等の方法が見つからないようです。WixSharp で見つけた最も近いものは、「AppSearch」クラス (WixSharp.CommonTasks の下) です。Wix から、「AppSearch」は検索タスクが保存される MSI データベース テーブルであることがわかりました。「IniFileSearch」はその検索の 1 つです。WixSharp ライブラリの「AppSearch」クラスが「AppSearch」MSI データベース テーブルに直接マップされているかどうかさえわかりません。とにかく、私の目標は、WixSharp ライブラリで「IniFileSearch」と同等のメソッドを見つけることです。それを知っている人がいれば、

これは、Wix マークアップの IniFileSearch のサンプルです。

<Property Id="MY_PROPERTY">
 <IniFileSearch Id="myIniSearch"
                Name="myConfigFile.ini"
                Section="section1"
                Key="name"
                Type="raw" />
</Property>
4

1 に答える 1

2

これは、WixSharp の作成者である Oleg Shilo から得た回答です。

Wix# は多くのことを異なる方法で行うため、「MSI IniFileSearch プロパティ」などのタスクは Wix# の話とはほとんど関係ありません。とにかく、Wix# に関する限り、RegValueProperty はネイティブでサポートされている唯一の MSI "AppSearch" タスクです。代わりに、Wix# を使用すると、MSI 機能に縛られることなく、あらゆる検索/分析を実行できる C# ルーチンを指定できます。

したがって、マネージド CA では、任意の C# アルゴリズムを使用して reg ファイルを読み取り、必要に応じてセッション プロパティを更新できます。

public class CustomActions
{
    [CustomAction]
    public static ActionResult MyAction(Session session)
    {
        session["EnvVersion"] = AppSearch.IniFileValue(Environment.ExpandEnvironmentVariables(@"%windir%\win.ini"),
                                                       "System",
                                                       "Version");
    }
}

上記のコードでは、Wix# が既に実装している IniFileValue ルックアップ ルーチンを使用しましたが、別の実装を使用することもできます。GetProfileString(...) との相互運用も可能です。

Managed Setup を使用する場合は、アクションを UIInitialized (または Load) イベント ハンドラーに配置する必要があります。

project.UIInitialized += project_UIInit;
...
static void project_UIInit(SetupEventArgs e)
{
    e.Session["EnvVersion"] = AppSearch.IniFileValue(Environment.ExpandEnvironmentVariables("%windir%\\config.ini"),
                                                     "System",
                                                     "Version") ?? "<unknown>"; 
}  

IniFileValue は最近追加されたばかりなので、現在プレリリース パッケージとして NuGet からのみ入手できることに注意してください。

Install-Package WixSharp.bin -Version 1.0.26
于 2015-09-24T16:49:16.243 に答える