2017-09-25 14 views
0

私はシステム変数を追加していますが、それらの変数に依存するカスタムアクションを実行したいと思います。変数は正しく追加されていますが、スクリプトは終了しています(その時点で変数が存在しないため)。 "After Install Files"を使用しています。ここに私のコード:Wixにシステム変数を追加した後でカスタムアクションを実行

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> 

    <Product Id="*" Name="DataBaseds_Service_Installer" Language="1033" Version="1.0.0.0" Manufacturer="" UpgradeCode="3875ce89-3886-4cbf-b132-01f947ac7a08"> 
     <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> 

     <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> 
     <MediaTemplate EmbedCab="yes" /> 
    <CustomAction Id="NssmUnzip" Directory="INSTALLFOLDER" Execute="deferred" Impersonate="no" ExeCommand="cmd.exe /c &quot;unzip.exe nssm-2.24.zip -d &quot;%TANGO_ROOT%\bin&quot; &quot;" Return="ignore" /> 
    <CustomAction Id="Tango_db" Directory="INSTALLFOLDER" Execute="deferred" Impersonate="no" ExeCommand="[INSTALLFOLDER]create-tangodb.bat" Return="ignore" /> 
    <CustomAction Id ="Baseds_Service" Directory="INSTALLFOLDER" Execute="deferred" Impersonate="no" ExeCommand="[INSTALLFOLDER]Tango-DataBaseds.bat" Return="ignore" /> 
    <CustomAction Id="UninstallService" Directory="INSTALLFOLDER" Execute="deferred" Impersonate="no" ExeCommand="[INSTALLFOLDER]Remove_Baseds_Service.bat" Return="ignore" /> 

    <InstallExecuteSequence> 
     <Custom Action="NssmUnzip" After="InstallFiles">NOT Installed</Custom> 
     <Custom Action="Tango_db" After="NssmUnzip">NOT Installed</Custom> 
     <Custom Action="Baseds_Service" After="Tango_db">NOT Installed</Custom> 
     <Custom Action="UninstallService" After="InstallInitialize"> Installed and Not REINSTALL</Custom>  
    </InstallExecuteSequence> 

    <Property Id="DIRR"> 
    <RegistrySearch Id="aaa" Root="HKCU" 
         Key="Software\corp\Tango" 
         Name="Directory" 
         Type="directory"/> 
    </Property> 
     <Feature Id="ProductFeature" Title="DataBaseds_Service_Installer" Level="1"> 
     <ComponentRef Id="MYSQL_Path"/> 
     <ComponentRef Id="MYSQL_USER"/> 
     <ComponentRef Id="MYSQL_PASSWORD"/> 
      <ComponentGroupRef Id="Components" /> 
     </Feature> 

     <Directory Id="TARGETDIR" Name="SourceDir"> 
      <Directory Id="ProgramFilesFolder"> 
       <Directory Id="INSTALLFOLDER" Name="DataBaseds_Service_Installer" /> 
      </Directory> 
     </Directory> 

    <ComponentGroup Id="Components" Directory="INSTALLFOLDER"> 

     <Component Id="NSSM" Guid="54CEB76C-6974-4071-96E9-EF5AD1937BD4"> 
     <File Source="nssm-2.24.zip" KeyPath="yes" /> 
     <File Source="Tango-DataBaseds.bat" KeyPath="no"/> 
     <File Source="Remove_Baseds_Service.bat" KeyPath="no"/> 
     <File Source="create-tangodb.bat" KeyPath="no"/> 
     </Component> 
     <Component Id="unzip" Guid="E10EE17A-AA5A-416B-82DF-37532281116C"> 
     <File Source="unzip.exe" KeyPath="yes"/> 
     </Component> 

    </ComponentGroup> 
    <DirectoryRef Id="TARGETDIR"> 
     <Component Id="MYSQL_USER" Guid="D05C8155-8421-4AEB-9A19-5016DAFAED19"> 
     <Environment Id="MYSQL_USER" Name="MYSQL_USER" Value="root" Permanent="no" Part="last" Action="set" System="yes" /> 
     </Component> 
     <Component Id="MYSQL_PASSWORD" Guid="222C7887-1E4D-4DC2-B429-A3F18F707FA3"> 
     <Environment Id="MYSQL_PASSWORD" Name="MYSQL_PASSWORD" Value="tango" Permanent="no" Part="last" Action="set" System="yes" /> 
     </Component> 
     <Component Id="MYSQL_Path" Guid="34D14695-1803-4D7E-AD65-3C9011D019CE"> 
     <Environment Id="PATH" Name="PATH" Value="[DIRR]bin" Permanent="no" Part="last" Action="set" System="yes" /> 
     </Component> 

    </DirectoryRef> 

    </Product> 
</Wix> 

私は何か間違っている? 挨拶

+0

この回答を確認してくださいhttps://stackoverflow.com/questions/4515905/set-environment-variable-before-running-a-custom-action-in-wixおそらく良い方法がありますこれを実装することができます。 –

+0

いいえ、これは私の状況ではありません:( 変数とカスタムacitonsの2つの別々のmsiファイルを作成できますが、残念ですが、そうしたくない場合は、 –

+0

スクリプトを修正できますか環境変数値を渡すことができますか?おそらくあなたはインストール中にそれらを設定していることを知っているでしょう。 –

答えて

0

Windowsインストーラでの環境変数を持つ2つの一般的な問題があります:Windowsインストーラは、「環境を送信しないため、彼らは、彼らは単にプログラムを自動的に実行するためには表示されません設定されている場合

  1. は、変数が変更されました」というメッセージが表示されます。プログラムを実行した後で、新しい値を取得します。

  2. 実行中のプロセスがメッセージループを持たず、(私が思う)WM_WININICHANGEメッセージを処理して環境をリロードする準備ができていない限り、実行中のプロセスがそれらを取得する理由はありません。

だからあなたのカスタムアクションのどれもが、彼らはまだシステムにブロードキャストし、「コミット」されていないため、新しい変数をピックアップするつもりはありません。そして、はい、プログラムにデータを渡す別の方法を見つける方が良いです。

0

Philは間違っていません。フィルが言うようにもかかわらず

:「システム変数は、インストール時に設定されていません。 Windowsインストーラは、環境変数は、ブロードキャストメッセージを変更した送信しない、誰もがこれまでと同じ問題を抱えているかどう しかし、ここでは、私の解決策でありますレジストリを読んでいるとき、インストールが終了するまで、それらは変数(この例では「DIRR」)の内部に格納されています。

<Property Id="DIRR"> 
     <RegistrySearch Id="aaa" Root="HKCU" 
          Key="Software\corp\Tango" 
          Name="Directory" 
          Type="directory"/> 
     </Property> 

ですから、スクリプトを実行し、引数として渡すことができます。

<CustomAction Id="Tango_db" Directory="INSTALLFOLDER" Execute="deferred" Impersonate="no" ExeCommand="[INSTALLFOLDER]create-tangodb.bat ****&quot;[DIRR]bin&quot;****" Return="ignore" /> 

これらの方法で、バッチファイルは、システムにまだ設定されていないにもかかわらず、システム変数にアクセスできます。 これが役に立ちますようお願いいたします。

関連する問題