かなり包括的なwixインストーラーmsiパッケージを開発しました。これには、10以上のc#カスタムアクションが含まれています。
私の問題は、プログラムでプロパティを「設定」する方法をまだ理解していないことです。
基本的に私がやりたいのは、既存のプロパティを新しいプロパティに解析することです。
この解析はc#で実行すると便利ですが、RegEx、JavaScript、またはw/eで実行することもできます。
ただし、c#カスタムアクション(「非即時カスタムアクションからセッションの詳細にアクセスできません」)からこれを行うことはできず、読み取ることができる限り、タイプ51カスタムアクションからのみプロパティを変更できます。ただし、タイプ51は私のc#カスタムアクションを使用できません。だからそのキャッチ22。
誰かがwixで次のことを実行する方法の例を教えてもらえますか:あるプロパティの値を使用して正規表現/文字列操作を実行し、その結果で別のプロパティを設定します。
これが可能であることは私には明らかなようですが、多くの検索の後、私はまだ暗闇の中にいます。
どんな助けでもいただければ幸いです。
編集#1:wixで3年間働いた後も、私はまだアマチュアのように感じますが、ここに行きます:プロパティを送信してカスタムアクションでそれらを操作する唯一の方法は次のパターンだと思いました:
<CustomAction Id="CA.SetCreateMessageQueueProperty"
Property="CA.CreateMessageQueue"
Value="MsmqData=.\Private$\[MYAPPLICATIONNAME]/ObservationReportingService.svc,Observation delivery queue"
Return="check"/>
<CustomAction Id="CA.CreateMessageQueue"
BinaryKey="BI.CA"
DllEntry="CreateMessageQueue"
Execute="deferred"
Return="check"
Impersonate="no"/>
<InstallExecuteSequence>
<Custom Action="CA.SetCreateMessageQueueProperty"
After="InstallFiles"/>
<Custom Action="CA.CreateMessageQueue" After="CA.SetCreateMessageQueueProperty">
<![CDATA[((&FE.Afs=3) AND NOT (!FE.Afs=3))]]>
</Custom>
</InstallExecuteSequence>
カスタムアクションc#アセンブリでは、次のようになります。
[CustomAction]
public static ActionResult CreateMessageQueue(Session session)
{
return session.DoCustomAction("CreateMessageQueue",
() =>
{
string msmqData = session.ExtractString("MsmqData");
//create actual message queue
}
}
});
}
internal static ActionResult DoCustomAction(this Session session, string name, Action action)
{
session.Log("Begin " + name);
session.Log("session.CustomActionData.Count:" + session.CustomActionData.Count);
try
{
action.Invoke();
}
catch (Exception ex)
{
session.Log(string.Format("Exception: {0}\nInner Exception: {1}", ex, ex.InnerException));
return ActionResult.Failure;
}
return ActionResult.Success;
}