2017-06-15 19 views
0

私はインストーラの2つの作業モードがあります。以前のインストールから WIXのインストール中に条件付きでファイルを上書きする方法はありますか?

  • すべての既存のconfigsを削除し、左

    1. 使用の設定ファイルを、代わりに

    モードはチェックボックスにによって決定されますが、デフォルトのコンフィグを置きますインストーラのWPF UI。第2のモードが選択されている場合は、のCustomActionを手動でディスクからのconfigsフォルダを削除され、実行されます。

    <InstallExecuteSequence> 
        <Custom Action="RemoveConfigsFolder" After="RemoveFolders" Overridable="yes">NOT Installed AND DELETESETTINGS=1</Custom>  
    </InstallExecuteSequence> 
    

    私はNeverOverwrite属性を使用しています:

    <ComponentGroup Id="Configs" Directory="INSTALLDIR" > 
        <Component Id="Configs" Permanent="yes" NeverOverwrite="yes"> 
        <File Id="main.config" Name="main.config" Source=".\Configs\main.config" KeyPath="yes" /> 
        </Component> 
    </ComponentGroup> 
    

    最初のモードは、この場合には正常に動作し、 2番目のモードを使用しようとすると失敗し、すべての設定が削除され、インストール中に再び作成されることはありません。問題の私の研究の間に

    は、私はこれが起こる理由を見つけたと思う:https://community.flexerasoftware.com/showthread.php?96157-The-truth-the-whole-truth-about-quot-Never-overwrite-quot-and-quot-Permanent-quot-files&p=156826#post156826

    実はこれは、Windowsインストーラの問題です。 をログに記録すると、インストールの初期段階でインストーラ は、このファイルを含むコンポーネントがインストールされないと判断します。 "上書きしない"とマークされています。機械。アンインストールは、 が既存のファイルを削除した後に発生します。これは、「CostFinalize」アクションが開始されたときにインストーラがこの を決定するためです。このアクションは、 "RemoveFiles"アクションの前に を実行する必要があります。

    しかし、どうすれば修正できますか?

  • +0

    これは大きなアップグレード状況ですか、もしそうなら、スケジュールはどこですか? – PhilDW

    答えて

    0

    私の最初の考えは、 'Never Overwrite'プロパティを削除することです。次に、ファイルが存在するかどうかをチェックするコンポーネント条件を作成します。私の考えは、あなたのカスタムアクションは、設定ファイルを正しく削除するための条件を持っているということです。ファイルが存在しない場合、コンポーネントはインストールのために選択されます。

    3

    Never OverwriteやPermanentなどの設定の問題は、ビルド設定のように見えますが、コンポーネントIDに関連付けられたシステムに固執しているわけではありません。したがって、プロジェクト内でリセットすることは、そのIDに関連付けられているため役に立ちません。定義上、パッチと上書きのアップグレードは上書きされないが上書きすることはセットアップの必要条件であるため、Never Overwriteを設定することが何らかの問題の解決策であった可能性は明確ではない。

    [上書きしない]を設定していない場合でも、インストール後にWindows Installerルールを変更した場合、ファイルを上書きすることはありません。あなたがそれをインストールしていた場合、それが変更されてアップグレードを実行した場合、ファイルは上書きされませんでした(Never Overwriteが必要ないように見えるもう一つの理由です)。

    別の問題は、カスタムアクションRemoveConfigsFolderにExecute列挙値が設定されていないため、即時に実行されるため昇格しないため、単に失敗する可能性があるため、削除を実行できない場合は問題が報告されます。また、フォルダへのフルパスを明示的に指定するかどうかを判断することもできません。したがって、この問題の最も直面する可能性のある修正は、カスタムアクションを実行遅延としてマークし、DELETESETTINGS値をCustomActionData経由で渡す必要があります。

    +0

    問題は、私はいつもアップグレードしているとは限らないことです。時にはアンインストールしてからインストールすることもあります。私の知る限り、Windowsインストーラのルールはこの場合別の方法で動作し、インストール後にファイルが変更されても上書きされます。これはNever Overwriteを使用する必要がある状況です。 – GaGar1n

    関連する問題