2016-05-06 10 views
0

私はアプリケーション用のWIXインストーラで作業していましたが、アップグレードのほんの一部で立ち往生しています。コピー先のインストールディレクトリに2つのXML設定ファイルがあります新しいProgramDataディレクトリ(今後は... \ Program Files ...には入っていないため)。WIXアップグレード中に別のディレクトリにファイルをコピーする

私は、別の角かっこ/アポストロフィ/ を含め、いくつかの解決策を試していません。 WIXインストーラをコンパイルすると、[CommonAppDataProduct][PRODUCTNAMEFOLDER]を含むプロパティに関するCANDLEの警告がいくつか表示されますが、Product.wxsで各カスタムアクションに定義されているディレクトリから参照/ PropertyRefが必要であるかどうかはわかりません。

スニペットProduct.wxs

<Product Id="*" Name="$(var.ProductName)" Language="0" Version="$(var.Version)" Manufacturer="$(var.Manufacturer)" UpgradeCode="$(var.UpgradeCode)"> 
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> 
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> 
<InstallExecuteSequence> 
    <SelfUnregModules/> 
    <SelfRegModules/> 
    <Custom Action="CopyConfigFilesToTemp" After="InstallValidate" /> 
    <Custom Action="LaunchDPInstActionx86" Before="InstallFinalize">NOT Installed OR MaintenanceMode="Modify"</Custom> 
    <Custom Action="CopyConfigFilesFromTemp" After="LaunchDPInstActionx86" /> 
</InstallExecuteSequence> 
</Product> 
... 
<Fragment> 
<Directory Id="$(var.PlatformProgramFilesFolder)"> 
     <Directory Id="PRODUCTNAMEFOLDER" Name="$(var.ProductName)"/> 
</Directory> 
</Fragment> 

カスタムアクションCopyConfigFilesToTemp

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Fragment> 
     <Property Id="QuietExec2" Value='"xcopy.exe [PRODUCTNAMEFOLDER]*.xml" %TEMP% /I /Y'/> 
     <CustomAction Id="CopyConfigFilesToTemp" BinaryKey="WixCA" DllEntry="WixQuietExec" Execute="immediate" Return="ignore"/> 
    </Fragment> 
</Wix> 

カスタムアクションCopyConfigFilesFromTemp

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Fragment> 
     <Property Id="QuietExec3" Value='"xcopy.exe %TEMP%\*.xml [CommonAppDataProduct]" /I /Y /R'/> 
     <CustomAction Id="CopyConfigFilesFromTemp" BinaryKey="WixCA" DllEntry="WixQuietExec" Execute="immediate" Return="ignore"/> 
    </Fragment> 
</Wix> 
+0

コンパイル時に表示される警告は何ですか? –

答えて

1

これらのカスタムアクションは、昇格された権限を必要とするプログラムファイルパス内の何かを変更しようとしているため、遅延カスタムアクションである必要があります。昇格された権限を持つインストールの唯一の部分は、ファイルのインストールディレクトリへのコピー時のインストールのサーバーサーバー部分です。

アクション内のmsiプロパティの1つを使用する予定の場合、遅延されたカスタムアクションには特別な要件があります。 Deferred Actions

上のMicrosoftのWebサイトを1として

インストールスクリプトは、それが書かれたインストール・セッションの外で実行することができるため、セッションはもはやインストールスクリプトの実行中に存在しないことがあります。つまり、インストールシーケンス中に設定された元のセッションハンドルおよびプロパティデータは、遅延実行カスタムアクションで使用できません。

これは基本的に、インストールの昇格した部分が起きている間に存在することが保証されている特別な場所にプロパティの値を配置する必要があることを意味します。その価値を得るために探します。

これらのアクションを実行するには、InstallInitializeとInstallFinalizeの間でスケジュールする必要があります。また、特別な場所からプロパティ値を取得できる必要があります。

延期されたカスタムアクションを使用するには、実行を延期に変更する必要がありますが、カスタムアクション内からQuietExecおよびQuietExec2の値を取得できるように、この特別なプロパティをフォーマット済みの値で追加する必要があります。

あなたが延期アクションのそれぞれについて、次のようにカスタムアクションを宣言する必要があります:

<CustomAction Id="CustomActionNameHere" Property="CopyConfigFilesToTemp" Value="QuietExec2=&quot;xcopy.exe [PRODUCTNAMEFOLDER]*.xml&quot; %TEMP% /I /Y" /> 
<CustomAction Id="CustomActionNameHere" Property="CopyConfigFilesFromTemp" Value="QuietExec3=&quot;xcopy.exe %TEMP%\*.xml [CommonAppDataProduct]&quot; /I /Y /R" /> 

一般的に、私は、彼らは接頭辞「設定」でのプロパティを設定しているカスタムアクションと同じ名前にこれらを呼び出します名前に。IE:SetCopyConfigFilesFromTempおよびSetCopyConfigFilesToTempは、簡単に見つけることができます。

これらのカスタムアクションのスケジュールを設定する必要があります。また、それらのカスタムアクションのスケジュール設定を行う必要があります。カスタムアクションコードで

<Custom Action="SetCopyConfigFilesToTemp" Before="CopyConfigFilesToTemp"> 
<Custom Action="SetCopyConfigFilesFromTemp" Before="CopyConfigFilesFromTemp"> 

、あなたはsession.CustomActionData["PropertyName"]の代わりを使用する必要がありますが、これらのコピーコマンドを実行する場合、私はあなたがしたいとは思わないので、私はまた、状況を検討するだけでsession["PropertyName"]

それらは製品をアンインストールするとき、またはアップグレードではなく新しくインストールしたときに実行されます。

+1

この回答は質問には当てはまらないかもしれませんが、とにかくここに残しておきます。 –

関連する問題