3

皆さん、

MSI のインストールでシーケンスの問題が発生しています。アプリの一部として、一連のサービスをインストールし、ユーザーがそれらをすぐに開始するか後で開始するかを選択できるようにします。

それらがすぐに開始されると、インストール シーケンスの初期段階 (データベース マネージャーがデータベースを更新する機会を得る前) に開始されているように見えます。

現在、データベース アップデーターを実行するカスタム アクションは次のようになっています。「InstallFinalize」の後に実行されています。プロセスの非常に遅い段階です。

   <InstallExecuteSequence>
      <RemoveExistingProducts After='InstallInitialize' />
      <Custom Action='RunDbUpdateManagerAction' After='InstallFinalize'>
           DbUpdateManager=3</Custom>
   </InstallExecuteSequence>

インストールされたサービスが起動する前にDBスクリプトが実行されるようにするために、後または前に実行するより適切な手順は何ですか? 「BeforeServiceStart」ステップはありますか?

編集:

タグに「Before='StartServices'」属性を定義するだけでは、問題は解決しませんでした。

問題は次のとおりだと思います。カスタム アクションには条件を表す「内部テキスト」があり、この条件は「&DbUpdateManager=3」です。試行錯誤から推測できることから、これはおそらく「DbUpdateManager機能を公開する必要がある」ことを意味します。

さて、問題は次のとおりです。「PublishFeature」は、インストール シーケンスの最後、「InstallFinalize」の直前、間違いなく InstallServices / StartServices の後です。したがって、「Before=StartServices」要件を指定すると、「DbUpdateManager 機能を公開する必要がある」という条件がまだ満たされていないため、DbUpdateManager は実行されません :-(

条件を削除しようとしました-その場合、私の DbUpdateManager はまったく実行されないこともあれば、複数回実行されることもあります-いつ何が起こるかについての明確なパターンはありません.....

もっとアイデアはありますか?? 「InstallFiles」ステップの後に「DbUpdateManager機能がインストールされている」という条件を確認する方法はありますか??

マルク

4

2 に答える 2

1

まあ、marc_sは別の質問でこれに答えたようです。ただし、私の解決策は少し異なり、他の質問では解決策を得るのに少し再構築が必要なため、これがまさに私にとってうまくいったことです。

...
<InstallExecuteSequence>
  <Custom Action="CopyConfigs" 
          After="InstallFiles"><![CDATA[&ProductFeature = 3]]></Custom>
</InstallExecuteSequence>
<CustomAction Id="CopyConfigs"
              FileKey="copySamples"
              ExeCommand=""
              Execute="deferred"
              Impersonate="no"/>

<Directory Id="TARGETDIR" Name="SourceDir">
...
  <Directory Id="Config" Name="Config">
    <Component Id="ShippedConfigs" Guid="{8E6344C8-2B3F-4654-8B42-C09E76200052}">
      <File Id="copySamples"
            Source="$(var.ProjectDir)config\Copy.Configs.Sample.cmd"
            KeyPath="no"
            DiskId="1" />
    </Component>
  </Directory>
</Directory>

<Feature Id="ProductFeature" Title="MyService" Level="1">
  <ComponentRef Id="ShippedConfigs" />
  ...
</Feature>
于 2010-04-22T18:38:53.680 に答える
1

ありませんBeforeServiceStartが、試すことができますBefore='StartServices'

于 2009-03-25T20:47:42.543 に答える