2016-10-13 16 views
0

Visual Studio 2015、WIX、MSI-installer。MSIが[CommonAppDataFolder]変数を展開しないのはなぜですか?

まず、ターゲットプラットフォームを取得します。

<!-- Define platform-specific names and locations --> 
<?if $(var.Platform) = x64 ?> 
<?define PLATFORMPROGRAMFILESFOLDER = "ProgramFiles64Folder" ?> 
<?else ?> 
<?define PLATFORMPROGRAMFILESFOLDER = "ProgramFilesFolder" ?> 
<?endif ?> 

はい、私はプリプロセッサにそれを行うが、私は別にx86およびx64のための私のMSIインストーラをビルドするためには、何の問題もなく動作します。このコードは、私のUI XML要素の内側にあります。私は実行時に同じことをする方法を知らない。 誰かが私を示した場合、私はそれをを行う方法は非常に感謝されるだろうが、私の現在の問題は、他についてです...私は問題を抱えている...

それは動作します:

... 
<!-- I am forced to define the INSTALLFOLDER again (inside of 'UI') because 
SelectInstallDirectory dialog doesnt see this property. --> 
<Property Id="INSTALLFOLDER" Value="$(env.ProgramData)\Autodesk\ApplicationPlugins\ProxyTools.bundle\"/> 
... 
<RadioButtonGroup Property="INSTALLFOLDER"> 
    <RadioButton 
    Text="[$(var.PLATFORMPROGRAMFILESFOLDER)]Autodesk\ApplicationPlugins\ProxyTools.bundle\" 
    Value="[$(var.PLATFORMPROGRAMFILESFOLDER)]Autodesk\ApplicationPlugins\ProxyTools.bundle\" 
    Height="13" Width="500" X="5" Y="5"/> 
    <RadioButton 
    Text="$(env.ProgramData)\Autodesk\ApplicationPlugins\ProxyTools.bundle\" 
    Value="$(env.ProgramData)\Autodesk\ApplicationPlugins\ProxyTools.bundle\" 
    Height="13" Width="500" X="5" Y="20"/> 
    <RadioButton 
    Text="[AppDataFolder]Autodesk\ApplicationPlugins\ProxyTools.bundle\" 
    Value="[AppDataFolder]Autodesk\ApplicationPlugins\ProxyTools.bundle\" 
    Height="13" Width="500" X="5" Y="35"/> 
</RadioButtonGroup> 
... 

は、それが作成されますダイアログ:私が使用して[AppDataFolder]に問題を持っていない

enter image description here

ご注意...

しかし、$(env.ProgramData)は、プリプロセッサーによってと評価されます。したがって、私は、実行時に評価値を[CommonAppDataFolder]に各$(env.ProgramData)\部分文字列を置き換えるために午前:

... 
<!-- I am forced to define the INSTALLFOLDER again (inside of 'UI') because 
SelectInstallDirectory dialog doesnt see this property. --> 
<Property Id="INSTALLFOLDER" Value="[CommonAppDataFolder]Autodesk\ApplicationPlugins\ProxyTools.bundle\"/> 
... 
<RadioButtonGroup Property="INSTALLFOLDER"> 
    <RadioButton 
    Text="[$(var.PLATFORMPROGRAMFILESFOLDER)]Autodesk\ApplicationPlugins\ProxyTools.bundle\" 
    Value="[$(var.PLATFORMPROGRAMFILESFOLDER)]Autodesk\ApplicationPlugins\ProxyTools.bundle\" 
    Height="13" Width="500" X="5" Y="5"/> 
    <RadioButton 
    Text="[CommonAppDataFolder]Autodesk\ApplicationPlugins\ProxyTools.bundle\" 
    Value="[CommonAppDataFolder]Autodesk\ApplicationPlugins\ProxyTools.bundle\" 
    Height="13" Width="500" X="5" Y="20"/> 
    <RadioButton 
    Text="[AppDataFolder]Autodesk\ApplicationPlugins\ProxyTools.bundle\" 
    Value="[AppDataFolder]Autodesk\ApplicationPlugins\ProxyTools.bundle\" 
    Height="13" Width="500" X="5" Y="35"/> 
</RadioButtonGroup> 
... 

しかし、私は私のMSIを起動すると[CommonAppDataFolder]が展開されていなかったので、この場合では、私は、errorrを得る:

enter image description here

なぜそれが起こり、どのように修正できますか?

答えて

0

あなたはprevious questionに答える際にこれを考えて、言及していたはずです。ここで重要なのは文脈です。問題の2つの属性は、RadioButton要素のText属性とValue属性です。これらはRadioButton tableの同じ名前の列に対応しています。私はTextがFormattedで、Valueはそうではないと言っていました。しかし、どちらもフォーマットされています。

私はその動作を正当化できません。それはうまくいくように見えます。

しかし、回避するのは簡単です。テキストに一致する値を使用する代わりに、"ProgramFiles""ProgramData"、および"AppData"のような短い値を使用してください。次に、ダイアログの[次へ]ボタンで、INSTALLFOLDERを以前に値属性に格納された値に設定するSetPropertyまたはSetDirectoryカスタムアクションを追加します。それぞれの値はINSTALLFOLDERの短い代替値に一致します。これらのカスタムアクションは、プロパティ参照を確実に拡張します。

さらに、RadioButtonGroupプロパティをディレクトリプロパティから分離してください(そのうちの1つにのみINSTALLFOLDERを使用してください)。その後、Backをクリックしてページを再訪すると、正しく表示されます。

+0

私は、[[CommonAppDataFolder] 'の代わりに'%ProgramData% '環境変数として' [%environmentvariable] 'フォーマット:' [%ProgramData] 'を使用しようとしましたが、私のプロジェクトでは動作しません。 –

+0

'[ProgramData]'も機能しません。どちらの場合もランタイムエラーが発生する:MSIはこれらの名前を展開できない。 –

+0

私は '[CommonAppDataFolder]'のこの問題がなぜ発生するのか分かりませんが、同時に '[AppDataFolder]'の問題はありません... –

0

ディレクトリ参照のどこでもCommonAppDataFolderを参照しましたか? AppDataFolderはどうですか?両方ともMSIファイルのディレクトリテーブルにありますか? Windowsインストーラーは、使用しない可能性のあるすべてのフォルダープロパティではなく、Directoryテーブルで明示的に指定されたディレクトリーのみを評価する可能性があります。

さらに、CostInitializeとCostFinalizeの後にダイアログが表示されますか? MSIを直接確認してください。

関連する問題