2011-01-10 15 views
1

IISにアドオンするISAPI DLLがあります。 WIX 3.0を使用してインストーラをビルドします。インストーラプロジェクトでJavascriptカスタムアクション内でMSIセッションの状態を管理するにはどうすればよいですか?

、私はJavaScriptで実装されたカスタムアクションの数を持っています。そのうちの1つは、インストールの開始時に実行され、実行中のIIS Webサイトを停止します。インストールの最後にIIS Webサイトが起動します。 このようなことがうまくいくと、CAは適切なタイミングで正しい条件で呼び出されます。しかし、論理はナイーブである。これは、たとえ既に停止していても、最初からすべてのウェブサイトを停止させ、(停止していたとしても)最後にすべてのウェブサイトを開始します。これは明らかに間違っています。私がやりたいのは何

は、ウェブサイトが最初に停止を要求されたセッションでトラックを保持し、その後、最後に、唯一のそれらのウェブサイトを再起動しようとしています。 CIMオブジェクトのServerState propertyを使用すると、Webサイトの状態を簡単に取得できます。私が持っている質問は、MSIセッションにこの情報をどのように保存すべきですか?

session Propertyに1つの情報を埋め込むのは簡単ですが、各ウェブサイトに1つのN個の情報を保存するにはどうすればよいですか?場合によっては、1つのウェブサイト、場合によっては51のウェブサイトが存在し得る。

私は個別のプロパティ名を作成するために、各個別のWebサイト名を使用することができたとします。それが最高の、最も効率的な、最も効果的なやり方であるかどうかは分かりません。また、MSI Sessionプロパティの名前にスラッシュを使用するのは合法ですか?

提案(Webサイト名はそれらにスラッシュを持つことになりますか)?あなたがチェックアウトする場合があります

答えて

0

単純な解決策があります。私は脳が痙攣していた。インストール中に停止していたウェブサイトの実際の名前 -

私が店に必要なアイテムのすべてが文字列でした。私はちょうど1つの文字列を作成するためにJavaScriptのString.join methodを使い、それをセッション変数に詰め込んだ。このように:

Session.Property("CA_STOPPEDSITES") = sitesThatWereStopped.join(","); 

その後別のカスタムアクションで、その情報を取得するために、私は

var stoppedSites = Session.Property("CA_STOPPEDSITES"); 
if (stoppedSites != null) { 
    var sitesToStart = stoppedSites.split(","); 
    .... 

、シンプルで簡単な操作を行います。

+0

データを取得するときにプロパティ「CA_STOPPEDSITES」を使用しているため、ダウン投票しています。これは、Windowsインストーラのベストプラクティスに違反するDeferred Executionでカスタムアクションが実行されていないことを示しています。あなたは本当にカスタムアクションスケジューリングの考慮事項について読むべきです。 –

+2

リンクをありがとう。うわー!リンクがありません! – Cheeso

0

VBScript (and Jscript) MSI CustomActions suck

C++やC#は非常に良い選択です。アプリケーションがすでにフレームワークに依存している場合は、インストーラに依存関係を追加するのが良い選択です。 WiXにはjscriptがたくさんあるカスタムアクションパターンを持つDeployment Tools Foundation(DTF)があります。その後、ウェブサイトとその実行状態の辞書を作成し、それを単一のプロパティに直列化することができます。裏側であなたはそのコレクションを再考し、それに基づいて行動することができます。

デバッグ話はDTFではるかに優れて言うまでもありません。

+0

私はその記事をチェックアウトしましたが、私は同意しません。 http://stackoverflow.com/questions/471424/wix-tricks-and-tips/1801532#1801532 C#は私にとっては悪い選択です。なぜなら、.NETが利用できるかどうかに頼ることができないからです。私はあなたの提案に参加するつもりです - 私はjavascriptのjoin/split関数を使用し、必要なすべての情報を単一のプロパティに入れます。それがどうなるか見てみましょう。 – Cheeso

+0

さて、ロブは彼の話を知っています。個人的に私はスクリプトカスタムアクションが失敗したことを目撃してしまい、それを再び実行しません。 –

+0

私は同意します、カスタムアクションのためにC++以外のものを使用することは決してありません。 – saschabeaumont

関連する問題